LD_LIBRARY_PATH,linux中的共享lib路径

时间:2012-02-23 11:38:30

标签: c linux shared-libraries

我写了一个共享对象,比如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,然后source ~/.bashrc,那么它再次对./test无效,为什么?

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

有所不同

2 个答案:

答案 0 :(得分:4)

如果没有导出,则声明的LD_LIBRARY_PATH仅在脚本(.bashrc)中有效。 使用导出它应该工作,但通常不是这样设置LD_LIBRARY_PATH。

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

答案 1 :(得分:2)

尝试使用$HOME/lib代替~/lib - 应该相同但我看到~在使用时未正确展开的情况变量赋值。

要查看,请尝试echo $LD_LIBRARY_PATH,它会为您提供当前值。

Re export:如果省略export,则该变量仅为当前shell进程所知,并且不会导出到子进程。因此,如果省略它,echo $LD_LIBRARY_PATH将获得该值,因为在 echo命令/ builtin有机会执行任何操作之前,变量由shell 扩展。但./test将无法看到它,因为它未导出到新的子流程。