虽然文件存在,但编译的C++程序在另一个系统上引发"无法打开共享对象文件"

tyr*_*dis 8 c++ linux linker g++ libraries

我写了一个小程序,需要一些库,包括libboost_filesystem,libboost_program_options和libcurl.

我在我的家用机器上编译它并将二进制文件带到我的计算机上进行测试.但是当我尝试启动程序时,它会给出以下错误消息:

error while loading shared libraries:
libboost_filesystem.so.1.42.0: cannot
open shared object file
Run Code Online (Sandbox Code Playgroud)

但是当我搜索这个文件时,我发现它存在于:/usr/lib/libboost_filesystem.so.1.42.0

在编译/链接我的程序时我有什么问题吗?如果是,我需要做些什么才能使其在其他机器上运行?

ezp*_*sso 7

首先,尝试ldconfig -p | grep libboost_filesystem.so在控制台中发出以确保库位于您的ld缓存中.

如果不是,则可能需要在/etc/ld.so.conf.d目录中添加名为boost.conf的文件.该文件应包含boost库的路径.然后运行以更新系统的ld缓存.sudo ldconfig

希望这会有所帮助......


Kla*_*aim 1

您是否编译了 boost 的共享二进制文件并将其提供给用户?

通常可以使用 boost 而无需提供任何二进制/共享。但是,如果您使用 boost::filesystem,则必须将二进制文件构建为 lib 或共享对象,并确保它可用于最终的可执行共享二进制搜索路径。

您可以在 boost 文档中找到解释和更多详细信息。这是Linux版本:http://www.boost.org/doc/libs/1_44_0/more/getting_started/unix-variants.html

从这个页面:

大多数 Boost 库都是仅包含头文件的:它们完全由包含模板和内联函数的头文件组成,并且在链接时不需要单独编译的库二进制文件或特殊处理。

...

唯一必须单独构建的 Boost 库是:

  • 增强文件系统
  • Boost.Graph并行
  • Boost.IOStreams
  • 增强MPI
  • 升压程序选项
  • Boost.Python(在构建和安装之前请参阅 Boost.Python 构建文档)
  • 正则表达式
  • Boost.序列化
  • 升压信号
  • 升压系统
  • 增强线程
  • 升压波