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

我正在Linux上构build一个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) 

我不知道为什么没有findliboos_system.sl.1.45.0 SO。 我今天早些时候成功了一点。 谁能解释一下?

Solutions Collecting From Web of "加载共享库时出错:libboost_system.so.1.45.0:无法打开共享对象文件:没有这样的文件或目录"

图书馆找不到。

默认情况下,在/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)的用户添加一个注释:这些系统有一个安全“功能”,可以清除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。 这意味着如果你从emacseclipse调用make ,它将不起作用,除非你从shell启动了emacs ,而不是从启动器启动。

这对我来说是有效的:

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