7

我有两个与同一问题相关的问题:

  1. 我在 `pwd`/lib 中保存了一个共享对象,虽然使用它的可执行文件编译成功(通过使用 -l 和 -L 开关),但在运行时,它让我很伤心。如果我尝试运行LD_LIBRARY_PATH=/my/absolute/path/to/library/directory ./test它工作正常。但是如果我导出 LD_LIBRARY_PATH=/my/absolute/path/to/library/directory 并./test说它找不到共享库。但是,如果我再做LD_LIBRARY_PATH=$LD_LIBRARY_PATH ./test一次,它工作正常!!关于我做错了什么的任何想法?

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

感谢您的时间!

4

2 回答 2

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仅在一个命令(命令)之前设置 LD_LIBRARY_PATH 变量./test。出于与上述相同的原因,我相信这不会转移到 shell./test创建的任何东西上。为了让它持续存在,您可能需要export LD_LIBRARY_PATH=...~/.bashrc

于 2013-03-31T12:57:41.403 回答
2

我发现有时通过 CFLAGS 环境变量显式添加 -L 是成功的,而 LD_RUN_PATH 不是。如:export CFLAGS=-L/opt/tool/lib

于 2015-08-25T09:02:59.063 回答