我写了一个共享对象,然后说说了libsd.so,把libsd.so它的头文件放进sd.h了~/lib。
libsd.so
sd.h
~/lib
这是另一个使用libsd.so,比如说的程序test.c,然后像这样编译它:
test.c
$ gcc -o test test.c -I~/lib -L~/lib -lsd
然后我test像这样运行:
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=.
unset LD_LIBRARY_PATH
LD_LIBRARY_PATH=~/lib
~/.bashrc
source ~/.bashrc
./test
export LD_LIBRARY_PATH=~/lib与放入LD_LIBRARY_PATH=~/lib有~/.bashrc什么区别?
export LD_LIBRARY_PATH=~/lib
如果没有导出,则声明的LD_LIBRARY_PATH仅在脚本(.bashrc)中有效。通过导出,它应该可以工作,但是像这样设置LD_LIBRARY_PATH通常不是一个好主意。
如果您不想在系统路径(例如/ usr / lib)中安装您的库,则可能应该使用一个脚本,该脚本在本地设置LD_LIBARAY_PATH并启动您的应用程序。