我最近在proggit上看到了它的引用,(到目前为止)它没有解释。

我怀疑可能就是这个原因,但我也不确定。


当前回答

可以通过创建具有相同符号的库并在LD_PRELOAD中指定库来覆盖库存库中的符号。

有些人使用它来指定非标准位置的库,但是LD_LIBRARY_PATH更适合这个目的。

其他回答

如果将LD_PRELOAD设置为共享对象的路径,则该文件将在任何其他库(包括C运行时libc.so)之前加载。所以要用你特殊的malloc()实现运行ls,这样做:

$ LD_PRELOAD=/path/to/my/malloc.so /bin/ls

下面是一篇关于预加载的详细博文:

https://blog.cryptomilk.org/2014/07/21/what-is-preloading/

使用LD_PRELOAD,可以给库优先级。

例如,你可以编写一个实现malloc和free的库。通过LD_PRELOAD加载这些,你的malloc和free将被执行,而不是标准的。

导出mylib。env:

$ export LD_PRELOAD=/path/mylib.so
$ ./mybin

禁用:

$ unset LD_PRELOAD

可以通过创建具有相同符号的库并在LD_PRELOAD中指定库来覆盖库存库中的符号。

有些人使用它来指定非标准位置的库,但是LD_LIBRARY_PATH更适合这个目的。