LD_LIBRARY_PATH 在哪里?如何设置 LD_LIBRARY_PATH 环境变量?

csx*_*csx 34 environment-variables

我正在尝试使用 Unix 构建一个 C++ 程序。

我得到了错误

Linking CXX executable ../../bin/ME
/usr/bin/ld: cannot find -lboost_regex-mt
Run Code Online (Sandbox Code Playgroud)

我听说我只需要在我的 LD_LIBRARY_PATH 环境变量中设置 libboost* 的位置,然后像我最初那样调用 make,键入

-L /usr/lib64 -l boost_regex-mt
Run Code Online (Sandbox Code Playgroud)

或者

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64
Run Code Online (Sandbox Code Playgroud)

但是 LD_LIBRARY_PATH 在哪里?如何设置 LD_LIBRARY_PATH 环境变量?

Cel*_*ada 33

如何设置 LD_LIBRARY_PATH 环境变量?

执行此操作时您已经设置了它:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64
Run Code Online (Sandbox Code Playgroud)

但这并不能解决你的问题。$LD_LIBRARY_PATH在执行时咨询,以提供搜索动态可链接库的附加目录列表。在链接时不咨询它(除了可能定位构建工具本身所需的库!)。

为了在构建时告诉链接器在哪里可以找到库,您需要使用-L链接器选项。你也已经这样做了:

-L /usr/lib64
Run Code Online (Sandbox Code Playgroud)

如果您仍然收到错误消息,那么您需要确保该库确实存在。你有一个文件libboost_regex-mt.solibboost_regex-mt.a在那个(或任何)目录中吗?请注意,此类文件libboost_regex-mt.so.othersuffix不计入此目的。如果你没有那个,那么你可能需要为这个库安装你的发行版的开发包。


小智 20

在 LD_LIBRARY_PATH 中永久添加新路径的另一种方法:

中编辑.conf文件/etc/ld.so.conf.d/

我曾经安装过一个应用程序,但它的库无法被另一个应用程序识别。然后我添加路径,即/usr/local/hdf5/lib,到x86_64-linux-gnu.conf文件。放在下一行就行了。节省。

然后运行 sudo ldconfig

有效。

PS:操作系统 Ubuntu 14.04


vin*_*c17 5

~/.profile您可以在您的 shell 和/或特定的 init 文件中设置它(例如~/.bashrc,对于 bash、~/.zshenv对于 zsh)。然后您需要重新启动 shell(并且可能注销并再次登录,具体取决于您的选择)。

您可以通过以下方式检查您的设置:

env | grep '^LD_LIBRARY_PATH'
Run Code Online (Sandbox Code Playgroud)

编辑:LD_LIBRARY_PATH适用于包含机器代码的共享库,其文件名通常包含.so在其名称中,可能后跟由句点分隔的数字,以区分不同的版本。尽管如此,仍有可能LD_LIBRARY_PATH由于 ABI 不匹配而找不到库。另请注意,语言(如 Perl 和 Python)和包可能有自己的库系统(也可能有.so文件),与LD_LIBRARY_PATH.