CentOS 8已安装boost-regex但运行程序提示缺失libboost_regex.so.5怎么办
问题解决方法
你遇到的是二进制程序依赖的boost regex库版本和系统自带版本不兼容的问题,libboost_regex.so.5 是旧版本Boost(通常是Boost 1.53版本,对应CentOS7默认的boost版本)的共享库soname,CentOS8默认源提供的boost版本更高,没有该soname的库,可采取以下方案解决:
- 方案1:手动安装对应版本的boost-regex包
libboost_regex.so.5属于CentOS7默认携带的boost 1.53版本组件,你可以先从CentOS官方旧版本软件包仓库下载对应CentOS7的boost-regex 1.53版本rpm安装包,再执行如下命令安装:
安装完成后执行sudo rpm -ivh boost-regex-1.53.0-28.el7.x86_64.rpmsudo ldconfig刷新共享库缓存,重新运行程序即可。 - 方案2:创建软链接临时兼容(存在ABI不兼容风险,仅建议临时测试使用)
直接给现有系统的高版本boost regex库创建libboost_regex.so.5的软链接,强制程序加载高版本库:
注意:如果程序用到了新旧版本不兼容的接口,运行时可能出现段错误、逻辑异常等问题。sudo ln -s /lib64/libboost_regex.so.1.66.0 /lib64/libboost_regex.so.5 sudo ldconfig - 方案3:重新编译程序(如果可以拿到程序源码)
拿到程序的C++源码后,在当前CentOS8环境下重新编译,编译时会自动链接系统现有版本的boost_regex库,不会再出现找不到libboost_regex.so.5的问题。 - 方案4:手动编译指定版本的Boost库
下载Boost 1.53版本的源码,手动编译安装到自定义路径(比如/opt/boost1.53),运行程序时通过LD_LIBRARY_PATH指定加载路径:
该方案不会影响系统自带的Boost版本,兼容性最好。# 编译安装Boost 1.53完成后运行程序时执行 LD_LIBRARY_PATH=/opt/boost1.53/lib ./prog - 方案5:使用容器运行程序
拉取CentOS7的Docker镜像,在容器内安装boost-regex后运行程序,无需修改宿主机环境。
内容的提问来源于stack exchange,提问作者Lucky
相关产品推荐
相关产品推荐

