ChatGPT解决这个技术问题 Extra ChatGPT

如何在linux中设置环境变量LD_LIBRARY_PATH

我首先执行了命令: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

u
user1824407

您应该添加有关您的发行版的更多详细信息,例如在 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
这是解决此问题的救星:尝试导入 psycopg2 时 SageMaker 中出现 'ImportError: libpq.so.5: cannot open shared object file: No such file or directory 错误。使用以下命令找到路径:$ find ~/ -name libpq.so.5 然后使用@user1824407 建议:sudo vim /etc/ld.so.conf.d/pyscopg.conf,然后是 libpg.so.5 的 SageMaker 位置:/home/ec2-user/anaconda3/envs/JupyterSystemEnv/lib/,然后运行 sudo ldconfig。魔法。
这对我不起作用,因为之后,即使重新启动,echo $LD_LIBRARY_PATH 也是空的......(Ubuntu 20.04)
B
BuZZ-dEE

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

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 特有的。
N
Neuron

添加

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 路径不会产生系统性问题/问题。
V
Vadim Kotov

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

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

Read more here


也帮助了我
是的,我同意 spt025 - 我从不知道这个技巧是可能的。我觉得充其量在一些古老的联机帮助页中存储了很多隐藏的东西......所以 StackOverflow 对那种特定类型的信息非常有帮助。
S
Some programmer dude

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


谢谢约阿希姆·皮勒博格。我已经重新启动系统,现在它的路径已永久设置。
T
Toby Speight

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


A
Anshul

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

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


抱歉没有提到分布。它的 Fedora 16
s
singingsingh

转到主文件夹并编辑 .profile 将以下行放在末尾 export LD_LIBRARY_PATH= 保存并退出。执行此命令 sudo ldconfig


I
Iharob Al Asimi

您可以尝试添加自定义脚本,例如 /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 安全得多
N
Neeku

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

sudo vi /etc/bash.bashrc 

滚动到底部,然后添加:

export LD_LIBRARY_PATH=.

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


J
Joseph

在 Ubuntu 20.04 Linux 中,这并不像它应该的那样明显和直截了当。

我将尝试让任何像我使用 Ubuntu 20.04.3 Linux 一样拔头发的人都可以轻松搞定。

首先确定库文件文件夹所在的路径。在我的例子中,我正在使用的 *.so 文件位于一个名为 libs 的文件夹中,并且这个文件夹在我的 Ubuntu 框中的路径是 /usr/lib

所以现在我想将路径 /usr/lib 添加到 LD_LIBRARY_PATH 以便当我在我的 Ubuntu 终端中运行 echo $LD_LIBRARY_PATH 时,我将能够看到路径 /usr/lib 回显,如下所示;

joseph$ echo $LD_LIBRARY_PATH
:/usr/lib

这是我使用的步骤

在 Ubuntu 20.04 Linux 框中打开终端 通过运行 cd /etc/ld.so.conf.d/ 将路径更改为 /etc/ld.so.conf.d/ 创建一个带有 *.conf 扩展名的文件,并在末尾添加一个文本编辑器,例如 vim 或 gedit 在我的情况下,我按如下方式创建它/lib 此后,我然后运行 gedit ~/.bash_profile 打开 ~/.bash_profile 文件,以便我可以在其中添加这一行 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib ,其中包括我的库文件夹的路径/我希望包含在 LD_LIBRARY_PATH 中的 usr/lib 我还运行 gedit ~/.bashrc 打开 ~/.bashrc 文件,以便我可以在其中添加这一行 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib ,其中包括包含我想要包含在 LD_LIBRARY_PATH 中的库 /usr/lib 的文件夹 当您在步骤 5 中添加完该行后,保存并关闭。在您的终端中,键入以下 sudo ldconfig 并按键盘上的 enter。关闭您正在使用的所有打开的终端,然后打开一个新的终端会话并运行 echo $LD_LIBRARY_PATH 如果您看到您添加的路径被回显,那么您做对了。

就我而言,这是我在新打开的 Ubuntu 终端会话中运行 echo $LD_LIBRARY_PATH 时看到的:/usr/lib

joseph$ echo $LD_LIBRARY_PATH
:/usr/lib

这就是我让它在我的 Ubuntu 20.04.3 Linux 机器上为我工作的方式。