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

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

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

我收到错误

Linking CXX executable ../../bin/ME
/usr/bin/ld: cannot find -lboost_regex-mt

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

-L /usr/lib64 -l boost_regex-mt

或者

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64

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

答案1

如何设置 LD_LIBRARY_PATH 环境变量?

当你这样做时你已经设置了它:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64

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

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

-L /usr/lib64

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

答案2

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

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

我曾经安装过一个应用程序,但它的库无法被另一个应用程序识别。然后我将路径(即 )添加/usr/local/hdf5/libx86_64-linux-gnu.conf文件中。只需放入下一行即可。节省。

然后运行sudo ldconfig

有效。

PS:操作系统Ubuntu 14.04

答案3

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

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

env | grep '^LD_LIBRARY_PATH'

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

答案4

解决方法:

添加到/etc/systemd/system/pm2-node.service

Environment=PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/app/nodejs/local/nvm/versions/node/v7.8.0/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Environment=PM2_HOME=/home/node/.pm2
Environment=LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2
Environment=OCI_LIB_DIR=/opt/oracle/instantclient_12_2

相关内容