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

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

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

  • 我有一个保存在 `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再次它工作正常!关于我做错了什么的任何想法?
  • 第二个问题与 LD_LIBRARY_PATH 环境变量的导出有关。如果我打开一个终端并输入 export LD_LIBRARY_PATH=/path/to/stuff然后输入 echo $LD_LIBRARY_PATH ,变量正确。但是,如果我编写一个包含导出命令的脚本,只需运行它并不会更新变量,而是需要运行 source install.sh为了实际持久化变量。什么是最好的解决方案?

  • 感谢您的时间!

    最佳答案

    回答第二个先提问:
    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

    关于g++ - 设置 LD_LIBRARY_PATH 环境变量以在运行时加载共享库 (g++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15729137/

    相关文章:

    c++ - 为什么一个简单的C++程序会产生这么多分支命令?在 Linux 上使用性能

    c++ - 如何在 native nodejs 插件中使用环境变量作为编译时常量?

    c - -rdynamic 仅用于选择符号?

    c++ - 从 pybind11 包装的代码动态链接共享库

    c++ - 链接库C++

    g++ - 如何从 shell 编译 macOS Sierra 上使用 dylib 路径的源代码

    R install.packages polyclip : where is config. 日志?在之前的帖子中没有答案

    dll - g++ 无法识别 dll 的文件格式

    bash - 如何创建一个 bash 环境变量,在命令之前添加环境变量前缀?

    linux - linux命令行查看进程的命令行和环境变量的方法