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

rho*_*ncu 5 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才能实际保存变量.什么是最好的解决方案?

感谢您的时间!

mad*_*tya 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变量.出于同样的原因,我相信这不会转移到shell ./test创建的任何东西.为了使它坚持下去,你可能需要把它export LD_LIBRARY_PATH=...放在你的~/.bashrc