加载共享库libboost_serialization.so.1.66.0失败问题求助
解决libboost_serialization.so.1.66.0加载失败的问题
你遇到的这个运行时共享库加载失败的问题,在Boost库搭配Eclipse开发的场景里挺常见的。结合你已经完成的配置,我整理了几个针对性的排查和解决步骤:
1. 确认LD_LIBRARY_PATH的生效范围
你手动执行的export LD_LIBRARY_PATH=/home/mydir/boost_1_66_0/stage/lib只在当前终端会话生效。如果是通过图形界面直接启动Eclipse,它并不会继承终端里设置的环境变量。解决方式有两种:
- 从配置好环境变量的终端启动Eclipse:打开终端,执行export命令后,再输入
eclipse启动IDE - 将路径配置到全局环境:编辑
~/.bashrc或/etc/profile文件,添加一行export LD_LIBRARY_PATH=/home/mydir/boost_1_66_0/stage/lib:$LD_LIBRARY_PATH,之后执行source ~/.bashrc或重启系统生效
2. 检查Eclipse运行配置的环境变量
Eclipse的运行配置可以单独设置环境变量,可能你项目编译时配置正确,但运行时没带上库路径:
- 打开
Run > Run Configurations - 找到你的C/C++ Application配置,切换到Environment标签页
- 点击
New,添加变量名LD_LIBRARY_PATH,值填写/home/mydir/boost_1_66_0/stage/lib;如果已有该变量,记得把Boost路径放在最前面,避免优先级冲突
3. 验证库文件的存在与权限
虽然你提到已将库放在指定路径,还是要做基础验证:
- 执行
ls -l /home/mydir/boost_1_66_0/stage/lib/libboost_serialization.so.1.66.0,确认文件真实存在,且当前用户拥有可读权限(至少有r权限) - 如果是软链接,检查链接指向是否正确:
readlink -f /home/mydir/boost_1_66_0/stage/lib/libboost_serialization.so,看它是否准确指向1.66.0版本的库文件
4. 编译时添加rpath(一劳永逸的方案)
不想依赖环境变量的话,可以在编译时给可执行文件嵌入库路径,让它运行时自动查找:
- 打开Eclipse项目属性,找到
C/C++ Build > Settings > GCC C++ Linker > Miscellaneous - 在Linker flags中添加:
-Wl,-rpath=/home/mydir/boost_1_66_0/stage/lib - 这样编译出的程序会自带库路径信息,无需再依赖LD_LIBRARY_PATH
5. 调整pthread库的链接顺序
你提到的链接参数-l boost_serialization pthread存在顺序问题:GCC中库的链接顺序很关键,依赖其他库的库要放在前面。正确的写法应该是-lboost_serialization -lpthread(库名与参数连写,无空格)
按照这些步骤逐一排查,应该能解决你的运行时库加载问题。
内容的提问来源于stack exchange,提问作者AwaitedOne
相关产品推荐
相关产品推荐

