LD_LIBRARY_PATH 不工作,而 LD_PRELOAD 工作正常

Posted

技术标签:

【中文标题】LD_LIBRARY_PATH 不工作,而 LD_PRELOAD 工作正常【英文标题】:LD_LIBRARY_PATH not working while LD_PRELOAD works fine 【发布时间】:2012-12-11 12:12:25 【问题描述】:

我正在一台机器上编译一个程序并在另一台没有兼容的 libstdc++ 库的机器上运行它。如果我这样运行它,即使用 LD_PRELOAD,它运行良好。

LD_PRELOAD=./libstdc++.so.6 ./program args

但是,如果我尝试使用 LD_LIBRARY_PATH,如下所示,它不会加载库,并且我会收到我没有所需的 libstdc++ 版本的错误。

export LD_LIBRARY_PATH="./libstdc++.so.6"
./program args

我该如何解决这个问题?

【问题讨论】:

如果 libstdc++.so.6 和我的程序在同一个目录下,你能告诉我如何使用 LD_LIBRARY_PATH 命令吗? 【参考方案1】:

您需要在 LD_LIBRARY_PATH 变量中提供路径:

LD_LIBRARY_PATH=$PWD ./program args

【讨论】:

【参考方案2】:

LD_LIBRARY_PATHPATH 一样,获取目录列表,而不是文件。

如果你想把当前目录(推荐)放在那里,你可以:

export LD_LIBRARY_PATH=.

但是最好把绝对路径放在那里,这样你就不会在更改目录时捡起随机垃圾。

对于您的具体问题,保留LD_PRELOAD 实际上可能是最好的方法,以防您的可执行文件具有rpath 设置(这可能会覆盖环境)。如果您不想每次都重新键入它,请创建一个包装脚本。

【讨论】:

以上是关于LD_LIBRARY_PATH 不工作,而 LD_PRELOAD 工作正常的主要内容,如果未能解决你的问题,请参考以下文章

LD_LIBRARY_PATH 不包含导出的路径

在linux中对LD_library_path进行设置的时候怎么把动态库追加在后面就不行??

LD_LIBRARY_PATH 与 LIBRARY_PATH

Golang SSH 加载 LD_PRELOAD 和 LD_LIBRARY_PATH 环境变量

linux armv7_32环境变量配置(LD_LIBRARY_PATH 库搜索路径)

LIBRARY_PATH和LD_LIBRARY_PATH