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

我写了一个小程序,需要一些库,包括libboost_filesystem,libboost_program_options和libcurl。 我在我的家用机器上编译它并将二进制文件带到我的计算机上进行测试。但是当我尝试启动程序时,它会给出以下错误消息:
error while loading shared libraries:
libboost_filesystem.so.1.42.0: cannot
open shared object file
但是当我搜索这个文件时,我发现它存在于: /usr/lib/libboost_filesystem.so.1.42.0 在编译/链接我的程序时我有什么问题吗?如果是,我需要做些什么才能使其在其他机器上运行?     
已邀请:
首先,尝试在控制台中发出
ldconfig -p | grep libboost_filesystem.so
以确保库位于您的ld缓存中。 如果不是,则可能需要在/etc/ld.so.conf.d目录中添加名为boost.conf的文件。该文件应包含boost库的路径。然后运行
sudo ldconfig
更新系统的ld缓存。 希望这会有所帮助......     
看起来你需要静态链接库。这是一个很好的解释。提升静态链接     
您是否链接了相同版本的boost_filesystem库?根据编译应用程序的方式,它需要存在相同版本的库。 您可以尝试检查应用程序实际查找的内容:
ldd <your app name>
也可以检查LD_LIBRARY_PATH环境变量。     
你能确定
/usr/lib/libboost_filesystem.so.1.42.0
不是死链接吗?     
你编译了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.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吗?     

要回复问题请先登录注册