4

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

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

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

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

我怎么解决这个问题?

4

2 回答 2

6

您需要在 LD_LIBRARY_PATH 变量中给出路径:

LD_LIBRARY_PATH=$PWD ./program args
于 2012-12-11T12:32:04.023 回答
6

LD_LIBRARY_PATH, like PATH, 获取目录列表,而不是文件。

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

export LD_LIBRARY_PATH=.

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

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

于 2012-12-11T12:33:35.343 回答