编译的C ++程序提出“不能打开共享目标文件”在另一个系统上,尽pipe该文件存在

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

我把它编译到我的家用机器上,然后把二进制文件拿到我的电脑上testing。 但是,当我尝试启动程序时,会出现以下错误消息:

error while loading shared libraries: libboost_filesystem.so.1.42.0: cannot open shared object file 

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

我的程序编译/链接过程中出错了吗? 如果是的话,我需要做些什么来使其在其他机器上工作?

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

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

希望这将有助于…

看起来你需要静态链接库。 这是一个很好的解释。 加强静态链接

你有没有链接到相同版本的boost_filesystem库? 根据编译应用程序的方式,它需要存在相同版本的库。

你可以尝试检查你的应用程序实际上是在寻找什么:

 ldd <your app name> 

大概也检查你的LD_LIBRARY_PATH环境变量。

你能确定/usr/lib/libboost_filesystem.so.1.42.0不是一个死链接吗?

你编译提升的共享二进制文件,并提供给用户?

经常提升可以使用没有任何二进制/共享提供。 但是,如果使用boost :: filesystem,则必须构建二进制文件(如lib或共享对象),并确保它可用于最终的可执行共享二进制搜索路径。

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

从这个页面:

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

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

  • Boost.Filesystem的
  • Boost.GraphParallel
  • 了Boost.Iostreams
  • Boost.MPI
  • Boost.ProgramOptions
  • Boost.Python(在构建和安装之前请参阅Boost.Python构建文档)
  • Boost.Regex
  • Boost.Serialization
  • Boost.Signals
  • Boost.System
  • Boost.Thread
  • Boost.Wave

在你的LD_LIBRARY_PATH环境变量中是/ usr / lib?