我遇到了与同一问题有关的两个问题:
我有一个共享对象保存在`pwd` / lib中,而使用它的可执行文件成功编译(通过使用-l和-L开关),在运行时,它给了我悲伤。如果我尝试运行LD_LIBRARY_PATH=/my/absolute/path/to/library/directory ./test
,它运行正常。但是,如果我将LD_LIBRARY_PATH = / my / absolute / path /导出到/ library /目录并执行./test
,则说它无法找到共享库。但是,如果我再次LD_LIBRARY_PATH=$LD_LIBRARY_PATH ./test
它可以正常工作!!关于我做错了什么想法?
第二个问题与导出LD_LIBRARY_PATH env变量有关。如果我打开终端并键入export LD_LIBRARY_PATH=/path/to/stuff
然后键入echo $LD_LIBRARY_PATH
,则该变量是正确的。但是,如果我编写包含export命令的脚本,只需运行它就不会更新变量,而是需要运行source install.sh
才能实际保留变量。什么是最好的解决方案?
感谢您的时间!
答案 0 :(得分:5)
首先回答第二个问题:
source
执行当前shell中的脚本,./install.sh
打开并在不同的shell中执行它。
http://www.unix.com/unix-dummies-questions-answers/537-difference-between-source-exec-script.html
现在提出第一个问题:
LD_LIBRARY_PATH=$LD_LIBRARY_PATH ./test
在只有一个命令(./test
命令)之前设置LD_LIBRARY_PATH变量。出于同样的原因,我认为这不会转移到./test
创建的shell。要使其保持不变,您可能需要将export LD_LIBRARY_PATH=...
放入~/.bashrc