我正在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。
/lib
/usr/lib
/etc/ld.so.conf
通常,系统库(例如boost,如果通过软件包管理器安装的话)位于中/usr/lib,但实际情况并非如此。
您的Boost库位于系统上的什么位置?您是自己编译的吗?在这种情况下,您应该告诉动态链接器通过使用LD_LIBRARY_PATH环境变量在它们所在的目录中查找您的库:
LD_LIBRARY_PATH
LD_LIBRARY_PATH="your/boost/directory" ./testfgci
无论如何,我建议您使用包管理器安装boost库,这会使您的生活变得更加简单。