加载共享库时出错:libboost_system.so.1.45.0:无法打开共享对象文件:没有这样的文件或目录
Posted
技术标签:
【中文标题】加载共享库时出错:libboost_system.so.1.45.0:无法打开共享对象文件:没有这样的文件或目录【英文标题】:error while loading shared libraries: libboost_system.so.1.45.0: cannot open shared object file: No such file or directory 【发布时间】:2011-06-02 15:37:43 【问题描述】:我正在 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。我今天早些时候成功地建造了它。谁能解释一下?
【问题讨论】:
可能在构建时,您将标志传递给编译器以获取其他链接器库,但是当您想要运行程序时,链接器路径中不存在 Boost 库。 linking problem in libraries 的可能重复项 我找到了答案。我必须将路径添加到我的 LD_LIBRARY_PATH 然后导出它。二进制运行,但报告错误(错误系统:9:错误的文件描述符)。我将不得不修改这个问题以反映这一点,或者提出一个新问题 【参考方案1】:找不到库。
默认情况下在/lib
、/usr/lib
和/etc/ld.so.conf
指定的目录中查找库。
通常系统库(如 boost,如果您通过包管理器安装它)位于 /usr/lib
,但可能不是您的情况。
您的 boost 库位于系统的什么位置?你是自己编译的吗?在这种情况下,您应该告诉动态链接器使用LD_LIBRARY_PATH
环境变量在它们所在的目录中查找您的库:
LD_LIBRARY_PATH="your/boost/directory" ./testfgci
我建议你使用包管理器安装 boost 库,无论如何,这会让你的生活变得更简单。
【讨论】:
【参考方案2】:我知道这是一个旧的,但您可以运行 ldconfig
来重建您的 ld 缓存。这样你就不需要更新LD_LIBRARY_PATH
。
【讨论】:
【参考方案3】:我只是想为 Ubuntu(和 Debian,我猜)的用户添加一个注释:
这些系统具有删除LD_LIBRARY_PATH
的安全“功能”。
这不起作用:
在/etc/environemnt
或~/.profile
或~/.bash_profile
:
export LD_LIBRARY_PATH=/usr/local/boost_1_54_0/stage/lib:$LD_LIBRARY_PATH
它适用于~/.bashrc
,但路径将仅针对此特定设置
交互式外壳。这意味着如果您从例如调用 make
emacs
或 eclipse
,
除非您从 shell 而不是从启动器启动 emacs
,否则它不会起作用。
这对我有用:
echo -e "\n/usr/local/boost_1_54_0/stage/lib" | sudo tee -a /etc/ld.so.conf
sudo ldconfig
【讨论】:
【参考方案4】:正如his answer 中提到的peoro,使用包管理器安装它。例如,如果您使用的是 Ubuntu 18.04,请运行
sudo apt install libboost-filesystem1.65.1
【讨论】:
以上是关于加载共享库时出错:libboost_system.so.1.45.0:无法打开共享对象文件:没有这样的文件或目录的主要内容,如果未能解决你的问题,请参考以下文章
加载共享库时出错,无法打开共享对象文件:没有这样的文件或目录(hiredis)
加载共享库时出错:libgmock.so:无法打开共享对象文件:没有这样的文件或目录
/usr/share/code/bin/../code:加载共享库时出错:libX11-xcb.so.1:无法打开共享对象文件: