LD_LIBRARY_PATH,linux中共享的lib路径
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/9412296/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
LD_LIBRARY_PATH, the shared lib path in linux
提问by Alcott
I wrote a shared object, say libsd.so
, and I put libsd.so
and its header file sd.h
in ~/lib
.
我写了一个共享对象,比如说libsd.so
,我把libsd.so
它的头文件sd.h
放在~/lib
.
Here is another program using libsd.so
, say test.c
, then compile it like this:
这是另一个使用libsd.so
,比如说 的程序test.c
,然后像这样编译它:
$ gcc -o test test.c -I~/lib -L~/lib -lsd
Then I run test
like this:
然后我test
像这样运行:
$ ./test
./test_sd: error while loading shared libraries: libsd.so: cannot open shared object file: No such file or directory
So I set export LD_LIBRARY_PATH=.
, then it works. But if I unset LD_LIBRARY_PATH
and put LD_LIBRARY_PATH=~/lib
in my ~/.bashrc
, then source ~/.bashrc
, again it doesn't work for ./test
, WHY?
所以我设置了export LD_LIBRARY_PATH=.
,然后它就起作用了。但是,如果我unset LD_LIBRARY_PATH
放入LD_LIBRARY_PATH=~/lib
我的~/.bashrc
,那么source ~/.bashrc
,它又对 不起作用./test
,为什么?
export LD_LIBRARY_PATH=~/lib
is difference from putting LD_LIBRARY_PATH=~/lib
in ~/.bashrc
?
export LD_LIBRARY_PATH=~/lib
是把差LD_LIBRARY_PATH=~/lib
的~/.bashrc
?
采纳答案by Tim
Without the export your declared LD_LIBRARY_PATH is only valid in the script (.bashrc). With the export it should work, but it is usually not a good idea to set your LD_LIBRARY_PATH like this.
如果没有导出,您声明的 LD_LIBRARY_PATH 仅在脚本 (.bashrc) 中有效。使用导出它应该可以工作,但是像这样设置 LD_LIBRARY_PATH 通常不是一个好主意。
If you don't want to install your library in the system path (e.g. /usr/lib) you should probably use a script that sets LD_LIBARAY_PATH locally and starts your application.
如果您不想在系统路径(例如 /usr/lib)中安装您的库,您可能应该使用一个在本地设置 LD_LIBARAY_PATH 并启动您的应用程序的脚本。
回答by Aaron Digulla
Try $HOME/lib
instead of ~/lib
- it shouldbe the same but I've seen cases where ~
wasn't expanded properly when used in an variable assignment.
尝试$HOME/lib
而不是~/lib
- 它应该是相同的,但我见过~
在变量赋值中使用时没有正确扩展的情况。
To check, try echo $LD_LIBRARY_PATH
which gives you the current value.
要检查,请尝试echo $LD_LIBRARY_PATH
哪个为您提供当前值。
Re export
: If you omit the export
, then the variable is only known to the current shell process and will not be exported to child processes. So if you omit it, echo $LD_LIBRARY_PATH
will get the value because the variable is expanded by the shell beforethe echo
command/builtin has a chance to do anything. But ./test
won't see it because it's not exported to the new subprocess.
Re export
: 如果省略export
,则该变量仅对当前shell 进程已知,不会导出到子进程。因此,如果省略它,echo $LD_LIBRARY_PATH
将获得该值,因为该变量在命令/内置命令有机会执行任何操作之前echo
已被 shell 扩展。但./test
不会看到它,因为它没有导出到新的子流程。