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_PATH
和PATH
一样,获取目录列表,而不是文件。
如果你想把当前目录(不推荐)放在那里,你可以:
export LD_LIBRARY_PATH=.
但是最好把绝对路径放在那里,这样你就不会在更改目录时捡起随机垃圾。
对于您的具体问题,保留LD_PRELOAD
实际上可能是最好的方法,以防您的可执行文件具有rpath
设置(这可能会覆盖环境)。如果您不想每次都重新键入它,请创建一个包装脚本。
【讨论】:
以上是关于LD_LIBRARY_PATH 不工作,而 LD_PRELOAD 工作正常的主要内容,如果未能解决你的问题,请参考以下文章
在linux中对LD_library_path进行设置的时候怎么把动态库追加在后面就不行??
LD_LIBRARY_PATH 与 LIBRARY_PATH
Golang SSH 加载 LD_PRELOAD 和 LD_LIBRARY_PATH 环境变量