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

pyt*_*nic 2 c c++ linux gcc

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

LD_PRELOAD=./libstdc++.so.6 ./program args
Run Code Online (Sandbox Code Playgroud)

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

export LD_LIBRARY_PATH="./libstdc++.so.6"
./program args
Run Code Online (Sandbox Code Playgroud)

我怎么解决这个问题?

hyd*_*yde 6

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

LD_LIBRARY_PATH=$PWD ./program args
Run Code Online (Sandbox Code Playgroud)


Mat*_*Mat 6

LD_LIBRARY_PATH,比如PATH,获取目录列表,而不是文件.

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

export LD_LIBRARY_PATH=.
Run Code Online (Sandbox Code Playgroud)

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

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