当前位置: 首页>>技术教程>>正文


加载共享库时出错:libboost_system.so.1.45.0:无法打开共享库文件:没有这样的文件或目录

, , , ,

问题描述

我正在Linux上构建C++可执行文件。可执行文件链接到一些Boost库中。

这是我尝试运行二进制文件时的输出:

root@yourbox:~/work/dev/c++/projects/testfgci/dist/Debug/GNU-Linux-x86$ ./testfgci 
./testfgci: error while loading shared libraries: libboost_system.so.1.45.0: cannot open shared object file: No such file or directory

然后,我在二进制文件上运行ldd来检查依赖关系:

root@yourbox:~/work/dev/c++/projects/testfgci/dist/Debug/GNU-Linux-x86$ ldd testfgci 
    linux-gate.so.1 =>  (0x00380000)
    libboost_system.so.1.45.0 => not found
    libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00b50000)
    libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0x005f6000)
    libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x0099a000)
    libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x001b3000)
    libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0x00110000)
    /lib/ld-linux.so.2 (0x00ea2000)

我不确定为什么找不到liboos_system.sl.1.45.0 SO。我今天早些时候成功构建了它。谁能解释?

最佳办法

找不到该库。

默认情况下,在/lib/usr/lib/etc/ld.so.conf指定的目录中查找库。

通常,系统库(例如boost,如果通过软件包管理器安装的话)位于/usr/lib中,但情况并非如此。

您的Boost库位于系统上的什么位置?您是自己编译的吗?在这种情况下,您应该告诉动态链接器通过使用LD_LIBRARY_PATH环境变量在它们所在的目录中查找您的库:

LD_LIBRARY_PATH="your/boost/directory" ./testfgci

无论如何,我建议您使用包管理器安装boost库,这会使您的生活变得更加简单。

次佳办法

我知道这是一个旧的,但是您可以运行ldconfig来重建您的ld缓存。这样,您无需更新LD_LIBRARY_PATH

第三种办法

我只想为Ubuntu(和Debian,我想)的用户添加注释:这些系统具有安全性”feature”,可以删除LD_LIBRARY_PATH。这不起作用:

/etc/environemnt~/.profile~/.bash_profile中:

export LD_LIBRARY_PATH=/usr/local/boost_1_54_0/stage/lib:$LD_LIBRARY_PATH

它适用于~/.bashrc,但仅为此特定的交互式 shell 设置路径。这意味着如果您从例如调用make emacseclipse,它将不起作用,除非您从 shell 而不是从启动器启动了emacs

这对我有用:

echo -e "\n/usr/local/boost_1_54_0/stage/lib" | sudo tee -a /etc/ld.so.conf 
sudo ldconfig

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/9576.html,未经允许,请勿转载。