LD_LIBRARY_PATH,Linux中的共享libpath

我写了一个共享对象,说libsd.so ,我把libsd.so和它的头文件sd.h放在~/lib

这里是另一个使用libsd.so程序,比如test.c ,然后像这样编译它:

 $ gcc -o test test.c -I~/lib -L~/lib -lsd 

然后我运行这样的test

 $ ./test ./test_sd: error while loading shared libraries: libsd.so: cannot open shared object file: No such file or directory 

所以我设置了export LD_LIBRARY_PATH=. ,那么它的作品。 但是,如果我unset LD_LIBRARY_PATH并将LD_LIBRARY_PATH=~/lib放在我的~/.bashrc ,那么./test source ~/.bashrc再次不能用于./test ,为什么?

export LD_LIBRARY_PATH=~/lib与将LD_LIBRARY_PATH=~/lib放在~/.bashrc

如果没有导出,则声明的LD_LIBRARY_PATH仅在脚本(.bashrc)中有效。 有了导出它应该可以工作,但是像这样设置LD_LIBRARY_PATH通常不是一个好主意。

如果您不想在系统路径中安装库(例如/ usr / lib),则应该使用在本地设置LD_LIBARAY_PATH的脚本并启动您的应用程序。

尝试$HOME/lib而不是~/lib – 它应该是相同的,但是我已经看到了~在使用变量赋值时不能正确展开的情况。

要检查,请尝试echo $LD_LIBRARY_PATH ,它给你的当前值。

重新export :如果你省略了export ,那么这个变量只对当前的shell进程是已知的,不会被导出到子进程。 所以,如果你忽略它, echo $LD_LIBRARY_PATH将会得到这个值,因为这个变量在shell命令/内建函数有可能做任何事情之前被shell扩展了。 但./test将不会看到它,因为它不会导出到新的子./test