2012-12-11 143 views
2

我正在一台机器上编译一个程序,并在另一台机器上运行它,它没有兼容的libstdC++库。如果我像这样运行它,那是使用LD_PRELOAD,它运行良好。LD_LIBRARY_PATH不工作,而LD_PRELOAD正常工作

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

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

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

我该如何解决这个问题?

+0

如果libstdC++。so.6和我的程序在同一个目录下,你能告诉我如何使用LD_LIBRARY_PATH命令。 – pythonic

回答

4

你需要给在LD_LIBRARY_PATH变量的路径:

LD_LIBRARY_PATH=$PWD ./program args 
6

LD_LIBRARY_PATH,像PATH,取目录,而不是文件的列表。

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

export LD_LIBRARY_PATH=. 

但它始终是更好地把绝对路径,在那里,让你不接随机垃圾,如果你改变目录。

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