我写了一个小程序,需要一些库,包括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?