【问题标题】:How to set the environmental variable LD_LIBRARY_PATH in linux如何在linux中设置环境变量LD_LIBRARY_PATH
【发布时间】:2023-11-02 02:09:01
【问题描述】:

我已经先执行了命令:export LD_LIBRARY_PATH=/usr/local/lib

然后我打开了.bash_profile 文件:vi ~/.bash_profile。 在这个文件中,我输入:

LD_LIBRARY_PATH=/usr/local/lib
export LD_LIBRARY_PATH

然后如果终端关闭并重新启动,输入echo $LD_LIBRARY_PATH 不会显示任何结果。

如何永久设置路径?

【问题讨论】:

  • 在这里指出显而易见的...如果您只想修复您所做的事情,请添加$,例如export LD_LIBRARY_PATH=$LD_LIBRARY_PATH
  • 之后运行sudo ldconfig
  • 这可能很傻,但你$ source ~/.bash_profile 了吗?我倾向于忘记这一点。然后就像@neckTwi 说的运行 ldconfig

标签: linux environment-variables


【解决方案1】:

文件.bash_profile 仅由登录shell 执行。您可能需要将其放入~/.bashrc,或者干脆注销并重新登录。

【讨论】:

  • 谢谢约阿希姆·皮勒博格。我已重新启动系统,现在它的路径已永久设置。
【解决方案2】:

export LD_LIBRARY_PATH=/usr/local/lib 放入~/.bashrc [最好放在脚本的末尾以避免任何覆盖,默认~/.bashrc 带有许多if-else 语句]

发布,每当您打开一个新的终端/控制台时,LD_LIBRARY_PATH 都会被反映

【讨论】:

  • 抱歉没有提到发行版。它的 Fedora 16
【解决方案3】:

您应该添加有关您的发行版的更多详细信息,例如在 Ubuntu 下,正确的做法是将自定义 .conf 文件添加到 /etc/ld.so.conf.d,例如

sudo gedit /etc/ld.so.conf.d/randomLibs.conf

在文件中,您应该写入包含您希望添加到系统的所有库的目录的完整路径,例如

/home/linux/myLocalLibs

记得只添加目录的路径,而不是文件的完整路径,该路径内的所有库都会被自动索引。

保存并运行sudo ldconfig 以使用此库更新系统。

【讨论】:

  • 抱歉没有提到发行版。它的 Fedora 16
  • 这真的是正确的方法吗?假设您有多个用户构建本地库,并且您已将他们都添加到 /etc/ld.so.conf.d。现在用户 A 可以链接到用户 B 的本地库。不好。
  • /usr/local/lib 通常已经存在,因此无需编辑任何文件,只需 sudo ldconfig
  • 奇怪,它对你们所有人都有效,但对我不起作用,而 export LD_LIBRARY_PATH .... 方式有效!!
  • 这对我不起作用,因为之后,即使重新启动,echo $LD_LIBRARY_PATH 也是空的......(Ubuntu 20.04)
【解决方案4】:

您可以尝试添加自定义脚本,例如在/etc/profile.d 中添加myenv_vars.sh

cd /etc/profile.d
sudo touch myenv_vars.sh
sudo gedit myenv_vars.sh

将此添加到空文件中,然后保存。

export LD_LIBRARY_PATH=/usr/local/lib

注销并登录,LD_LIBRARY_PATH 将被永久设置。

【讨论】:

  • 很棒的答案。对我来说,每次在系统初始化期间导出路径的最佳选择,比物理编辑 /etc/bashrc 安全得多
【解决方案5】:

添加

LD_LIBRARY_PATH="/path/you/want1:/path/you/want/2"

/etc/environment

请参阅Ubuntu Documentation

更正:我应该听取自己的建议并实际阅读文档。它说这不适用于 LD_LIBRARY_PATH:由于 Ubuntu 9.04 Jaunty Jackalope,LD_LIBRARY_PATH 不能在 $HOME/.profile、/etc/profile 和 /etc/environment 文件中设置。您必须使用 /etc/ld.so.conf.d/.conf 配置文件。* 所以user1824407's answer 是正确的。

【讨论】:

  • 哇,那个页面我看了好几遍都忽略了。感谢您发现它并引起我们的注意。
  • Ubuntu 在这里是一个特例。 Ubuntu 的观点是所有用户都想要相同的库,并且每个库只有一个位置(阅读 Launchpad 错误 #366728 中的讨论)。但是,在多用户研究或开发系统上,您希望每个用户能够拥有自己的库版本。大多数 Linux 发行版都允许这样做,并且已经这样做了很多年。
  • 花了 4 个小时试图弄清楚为什么我可以设置 PATH 和 PKG_CONFIG_PATH,但不能设置 LD_LIBRARY_PATH。我什至不能。
  • @JoachimWagner 是的,这是正确的,为什么 conda 和/或 bioconda 或 virtenv 现在是调用具有特殊环境变量的特定程序的首选方法。通过使用封装环境,无意中设置 LD_LIBRARY 路径不会产生系统性问题/问题。
【解决方案6】:

我在 Mint 15 到 17 中执行以下操作,也适用于 ubuntu 服务器 12.04 及更高版本:

sudo vi /etc/bash.bashrc 

滚动到底部,并添加:

export LD_LIBRARY_PATH=.

所有用户都添加了环境变量。

【讨论】:

    【解决方案7】:

    由于某种原因,没有人提到 bashrc 需要在编辑后重新获取资源这一事实。您可以注销并重新登录(如上所述),但您也可以使用以下命令:source ~/.bashrc. ~/.bashrc

    【讨论】:

      【解决方案8】:

      您也可以使用指定的库目录执行程序:

      /lib/ld-linux.so.2 --library-path PATH EXECUTABLE
      

      Read more here.

      【讨论】:

      • 也帮助了我
      • 是的,我同意 spt025 - 我从来不知道这个技巧是可能的。我觉得在一些过时的联机帮助页中最多可以隐藏很多东西......所以 * 对那种特殊的信息真的很有帮助。
      【解决方案9】:

      保留之前的路径,不要覆盖它:

      export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/your/custom/path/
      

      您可以将其添加到您的~/.bashrc:

      echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/your/custom/path/' >> ~/.bashrc
      

      【讨论】:

      • 不要问我为什么,但这不起作用,直到我做了这个小改动:mv ~/.bashrc ~/.bash_profile,否则相同的代码和相同的文件权限。然后它起作用了。这是在 Ubuntu 20.04.1 LTS 上。如果没有此文件重命名,LD_LIBRARY_PATH 在重新登录时仍将为空。 .bashrc 是用户的 rwx,所以它应该可以正常执行。手动执行它也不会设置LD_LIBRARY_PATH(有点预期),并且采购它(. ./.bashrc)确实设置了它。很奇怪,我希望它是 Ubuntu 20.04.1 LTS 特有的。
      【解决方案10】:
      1. 转到主文件夹并编辑 .profile
      2. 下面一行放在最后

        export LD_LIBRARY_PATH=<your path>

      3. 保存并退出。

      4. 执行这个命令

        sudo ldconfig

      【讨论】: