LD_LIBRARY_PATH在LD_PRELOAD正常工作时无法正常工作

时间:2012-12-11 12:12:25

标签: c++ c linux gcc

我正在一台机器上编译程序并在另一台没有兼容libstdc ++库的机器上运行它。如果我像这样运行它,那就是使用LD_PRELOAD,它运行正常。

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

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

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

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:6)

LD_LIBRARY_PATHPATH一样,采用目录列表,而不是文件。

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

export LD_LIBRARY_PATH=.

但是最好将绝对路径放在那里,以便在更改目录时不会随机拾取垃圾。

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

答案 1 :(得分:4)

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

LD_LIBRARY_PATH=$PWD ./program args