我正在尝试使用 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.so
或libboost_regex-mt.a
在该(或任何)目录中吗?请注意,类似的文件libboost_regex-mt.so.othersuffix
不计入此目的。如果您没有,那么您可能需要安装该库的发行版开发包。
答案2
在 LD_LIBRARY_PATH 中永久添加新路径的另一种方法:
编辑.conf
文件中的/etc/ld.so.conf.d/
.
我曾经安装过一个应用程序,但它的库无法被另一个应用程序识别。然后我将路径(即 )添加/usr/local/hdf5/lib
到x86_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