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.so
或libboost_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
~/.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
.