Ubuntu16.04编译Caffe报错:.build_release/src/caffe/util/blocking_queue.o Error 1
解决Ubuntu16.04编译Caffe时boost绑定相关编译错误
兄弟,我之前也帮不少人解决过Ubuntu16.04编译Caffe时碰到的这个报错,你遇到的make: *** [.build_release/src/caffe/util/blocking_queue.o] Error 1,核心就是boost库的版本或者配置出了岔子,尤其是boost/bind这块的头文件冲突或者版本不匹配。下面给你几个亲测有效的解决步骤:
第一步:统一系统boost库版本,避免冲突
Ubuntu16.04默认自带的boost是1.58版本,这个版本和Caffe的兼容性很好。如果你自己手动装过更高版本的boost,很容易出现头文件打架的情况:
- 先查一下当前系统里装了哪些boost相关包:
dpkg -l | grep libboost - 如果发现有手动安装的高版本boost,先把它卸掉:
# 要是你是源码编译安装的boost,进入当初的安装目录执行卸载 cd /path/to/your/boost_install_dir sudo ./bootstrap.sh --uninstall # 再清理残留的头文件和库文件 sudo rm -rf /usr/local/include/boost sudo rm -rf /usr/local/lib/libboost* - 重新安装系统默认的完整boost开发库:
sudo apt-get update sudo apt-get install libboost-all-dev
第二步:调整Caffe的Makefile.config配置
打开Caffe根目录下的Makefile.config文件,确保boost相关配置正确:
- 找到
USE_BOOST的选项,确保它是开启状态(如果之前被注释了就取消注释):# Uncomment to use boost threads USE_BOOST := 1 - 如果你之前手动指定过boost的INCLUDE_DIR或者LIBRARY_DIR,把这些行注释掉,让系统自动用默认路径:
# BOOST_INCLUDE_DIR := /usr/local/include # BOOST_LIBRARY_DIR := /usr/local/lib
第三步:清理编译缓存,重新编译
改完配置后,一定要把之前编译的残留文件清干净,不然容易带着旧错误继续编译:
make clean # 用多线程编译加快速度,nproc会自动识别CPU核心数 make all -j$(nproc)
额外排查:检查gcc版本是否兼容
Ubuntu16.04默认的gcc是5.4.0,和boost 1.58适配得很好。如果你之前升级过gcc到7以上版本,也可能触发这个编译问题,可以切换回默认的gcc:
sudo update-alternatives --config gcc sudo update-alternatives --config g++
在弹出的选项里选对应gcc-5的编号就行。
补充一句:这个错误本质是boost的bind机制在不同版本、不同编译环境下的实现有差异,Caffe的
blocking_queue.cpp依赖boost的线程和绑定功能,一旦头文件路径乱了或者版本不对,就会炸出这个编译错误。
内容的提问来源于stack exchange,提问作者Frank.Fan
相关产品推荐
相关产品推荐

