我正在一台机器上编译程序并在另一台没有兼容libstdc ++库的机器上运行它。如果我像这样运行它,那就是使用LD_PRELOAD,它运行正常。
LD_PRELOAD=./libstdc++.so.6 ./program args
但是,如果我尝试使用LD_LIBRARY_PATH,如下所示,它不会加载库,我得到的错误是我没有所需的libstdc ++版本。
export LD_LIBRARY_PATH="./libstdc++.so.6"
./program args
我该如何解决这个问题?
答案 0 :(得分:6)
LD_LIBRARY_PATH
与PATH
一样,采用目录列表,而不是文件。
如果您想将当前目录(不推荐)放在那里,您可以:
export LD_LIBRARY_PATH=.
但是最好将绝对路径放在那里,以便在更改目录时不会随机拾取垃圾。
对于您的具体问题,如果您的可执行文件具有LD_PRELOAD
设置(可能会覆盖环境),则保留rpath
实际上可能是最好的方法。如果您不想每次都重新键入它,请创建一个包装器脚本。
答案 1 :(得分:4)
您需要在LD_LIBRARY_PATH变量中提供路径:
LD_LIBRARY_PATH=$PWD ./program args