设置LD_LIBRARY_PATH环境变量以在运行时加载共享库(g ++)

时间:2013-03-31 11:57:23

标签: g++ environment-variables dynamic-linking dynamic-library

我遇到了与同一问题有关的两个问题:

  1. 我有一个共享对象保存在`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它可以正常工作!!关于我做错了什么想法?

  2. 第二个问题与导出LD_LIBRARY_PATH env变量有关。如果我打开终端并键入export LD_LIBRARY_PATH=/path/to/stuff然后键入echo $LD_LIBRARY_PATH,则该变量是正确的。但是,如果我编写包含export命令的脚本,只需运行它就不会更新变量,而是需要运行source install.sh才能实际保留变量。什么是最好的解决方案?

  3. 感谢您的时间!

1 个答案:

答案 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