加载共享库失败:libboost_serialization.so.1.66.0找不到的解决求助
咱们一步步来解决这个共享库的问题,手动编译Boost后遇到这种情况太常见了。下面是几个靠谱的解决办法:
解决方案1:临时配置动态库搜索路径(适合快速测试)
直接在运行程序前,把Boost的lib目录加入到系统动态库搜索路径中:
export LD_LIBRARY_PATH=/home/Hussain/boost_1_66_0/lib:$LD_LIBRARY_PATH
执行完这条命令后再运行你的程序,系统就会优先从指定路径查找动态库。注意这个设置只在当前终端会话有效,关闭终端后就会失效。
解决方案2:永久配置系统动态库搜索路径(推荐长期使用)
如果想让设置永久生效,分两种场景操作:
- 仅当前用户生效:编辑你的shell配置文件(比如
~/.bashrc或~/.zshrc,取决于你用的shell),添加一行:
保存后执行export LD_LIBRARY_PATH=/home/Hussain/boost_1_66_0/lib:$LD_LIBRARY_PATHsource ~/.bashrc(对应你的配置文件),让设置立即生效。 - 所有用户生效:新建一个系统级的配置文件,比如
/etc/ld.so.conf.d/boost.conf,在里面添加一行:
然后执行/home/Hussain/boost_1_66_0/libsudo ldconfig更新系统的动态库缓存,这样所有用户运行程序时都会自动识别这个路径。
解决方案3:编译时嵌入运行时库路径(无需依赖环境变量)
你可以在编译程序时,通过链接器参数把Boost库的路径直接嵌入到可执行文件中,这样运行时就不用依赖环境变量了。在Eclipse里这么操作:
- 打开项目的
Properties设置界面 - 导航到
C/C++ Build → Settings → GCC C++ Linker → Miscellaneous - 在
Other flags里添加参数:-Wl,-rpath=/home/Hussain/boost_1_66_0/lib - 保存设置后重新编译程序
额外检查点
- 先确认
/home/Hussain/boost_1_66_0/lib目录下确实存在libboost_serialization.so.1.66.0文件(以及对应的软链接libboost_serialization.so)。如果没有,说明你编译Boost时没包含serialization库,需要重新编译:./b2 stage threading=multi --with-serialization - 你之前执行的
./bootstrap.sh --prefix=/usr && ./b2 stage ...是打算把Boost安装到/usr目录吗?如果是,那库路径应该是/usr/lib,要确认你实际的库文件位置,别和/home/Hussain/boost_1_66_0/lib搞混了。
内容的提问来源于stack exchange,提问作者Agaz Wani
相关产品推荐
相关产品推荐

