C LD_LIBRARY_PATH,linux中的共享库路径
我编写了一个共享对象,比如说C LD_LIBRARY_PATH,linux中的共享库路径,c,linux,shared-libraries,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_sd: error while loading shared libraries: libsd.so: cannot open shared object file: No such file or
libsd.so
,我将libsd.so
及其头文件sd.h
放在~/lib
中
下面是另一个使用libsd.so
的程序,比如说test.c
,然后像这样编译它:
$ gcc -o test test.c -I~/lib -L~/lib -lsd
$ ./test
./test_sd: error while loading shared libraries: libsd.so: cannot open shared object file: No such file or directory
然后我像这样运行test
:
$ gcc -o test test.c -I~/lib -L~/lib -lsd
$ ./test
./test_sd: error while loading shared libraries: libsd.so: cannot open shared object file: No such file or directory
所以我设置了导出LD\u库路径=。,然后它就可以工作了。但是如果我取消设置LD\u LIBRARY\u PATH
并将LD\u LIBRARY\u PATH=~/lib
放在我的~/.bashrc
中,那么源代码~/.bashrc
,它同样不适用于/test
,为什么
export-LD\u LIBRARY\u PATH=~/lib
与将LD\u LIBRARY\u PATH=~/lib
放入/.bashrc
?尝试$HOME/lib
而不是~/lib
-应该是一样的,但我见过在变量赋值中使用~/code>时没有正确展开的情况
要进行检查,请尝试echo$LD\u LIBRARY\u PATH
,该路径提供当前值
Reexport
:如果省略export
,则该变量仅为当前shell进程所知,不会导出到子进程。因此,如果省略它,echo$LD_LIBRARY_PATH
将获得该值,因为在echo
命令/builtin有机会执行任何操作之前,该变量由shell展开。但是/test
不会看到它,因为它没有导出到新的子流程。尝试$HOME/lib
而不是~/lib
-应该是相同的,但我见过~
在变量赋值中使用时没有正确展开的情况
要进行检查,请尝试echo$LD\u LIBRARY\u PATH
,该路径提供当前值
Reexport
:如果省略export
,则该变量仅为当前shell进程所知,不会导出到子进程。因此,如果省略它,echo$LD_LIBRARY_PATH
将获得该值,因为在echo
命令/builtin有机会执行任何操作之前,该变量由shell展开。但是/test
不会看到它,因为它不会导出到新的子流程。如果没有导出,您声明的LD_库路径仅在脚本(.bashrc)中有效。
对于导出,它应该可以工作,但是像这样设置LD_LIBRARY_路径通常不是一个好主意
如果您不想在系统路径(例如/usr/lib)中安装库,您可能应该使用在本地设置LD_LIBARAY_路径并启动应用程序的脚本。没有导出,您声明的LD_libray_路径仅在脚本(.bashrc)中有效。
对于导出,它应该可以工作,但是像这样设置LD_LIBRARY_路径通常不是一个好主意
如果您不想在系统路径(例如/usr/lib)中安装库,您可能应该使用在本地设置LD_LIBARAY_路径并启动应用程序的脚本。替换为Isource~/.bashrc
,和echo$LD_library_path
给出当前值,您的意思是如果我想/test
工作,我仍然应该导出LD_库路径
?是的,您必须始终导出LD_库路径,否则它将无效。替换为Isource~/.bashrc
,和echo$LD_库路径
给出当前值,您的意思是如果我希望/test
工作,我仍然应该导出LD\u LIBRARY\u PATH
?是的,您必须始终导出LD\u LIBRARY\u PATH
,否则它将无效。那么,为什么这不是一个好主意呢?你能详细解释一下吗?你可以在这里看到,为什么这不是一个好主意:然而,看起来,你甚至不应该在脚本中使用它,而是应该使用-R选项。我使用的是Fedora而不是Solaris,但是gcc中是否有一个-R
?在Fedora上应该有-rpath,这应该可以做几乎相同的事情,尽管我实际上不太清楚,为什么这不是个好主意?你能详细解释一下吗?你可以在这里看到,为什么这不是一个好主意:然而,看起来,你甚至不应该在脚本中使用它,而是应该使用-R选项。我使用的是Fedora而不是Solaris,但是gcc中是否有一个-R
?在Fedora上应该有-rpath,这应该可以做几乎相同的事情,虽然我实际上不知道确切的情况。