CentOS7安装Nova与HoneyD时make出现boost链接错误的解决求助
你碰到的这个错误是链接阶段找不到boost filesystem库的copy_file函数实现,大概率是boost库未正确安装、链接参数缺失,或者版本不兼容导致的。我之前在CentOS 7上处理过类似依赖boost的编译问题,给你几个可行的解决步骤:
1. 确保boost filesystem开发库已正确安装
CentOS 7默认的软件源里有boost的开发包,先通过yum安装完整的依赖:
sudo yum install boost-devel boost-filesystem
如果是你自己源码编译的boost,要确认libboost_filesystem.so和libboost_system.so已经安装到系统的库路径(比如/usr/lib64),或者后续编译时指定正确的库路径。
2. 检查并修正Makefile的链接参数
找到Nova项目的Makefile(大概率在/usr/share/Nova或者Novad/Release目录下),查看链接阶段的参数,必须包含-lboost_filesystem和-lboost_system(因为boost filesystem依赖boost system库)。如果没有的话,手动添加到对应的变量中:
# 在Makefile中找到LDFLAGS或者LIBS变量,添加以下内容 LDFLAGS += -lboost_filesystem -lboost_system
3. 处理boost版本兼容问题
CentOS 7默认的boost版本是1.53,而Nova的代码可能是针对更高版本的boost编写的——copy_file函数的接口在boost 1.56前后有过参数变化。这里有两种处理方式:
方式一:修改代码适配旧版本boost
找到报错的Config.cpp和NovaUtil.cpp文件,修改copy_file的调用方式,去掉error_code参数,改用旧版本的接口:
// 把原来带error_code的调用,改成这种形式(根据需求选择copy_option) boost::filesystem::copy_file(src_path, dest_path, boost::filesystem::overwrite_if_exists);
方式二:编译安装新版本boost
如果不想修改代码,可以编译安装boost 1.60+版本,然后在编译Nova时指定使用新的boost库:
# 先清理之前的编译产物 make clean # 指定boost根目录和库目录重新编译 make BOOST_ROOT=/path/to/your/boost BOOST_LIBRARYDIR=/path/to/your/boost/lib release
4. 重新编译验证
完成上述操作后,先执行make clean清理之前的编译缓存,再执行make release重新编译,应该就能解决这个链接错误了。
内容的提问来源于stack exchange,提问作者Shistastic

