CentOS6.5编译Caffe过程记录(系统存在多个编译器)

最近开始学习Caffe,准备工作就是要把Caffe的开发环境建立起来,首先就是要能成功编译Caffe,买了一本Caffe入门书:《深度学习:21天实战Caffe》,上面有详细的Caffe编译说明。原本以为照着说明步骤一步步往下走就能一轻松完成编译,实际情况却比我想象的复杂了。
先说明一下我的电脑环境:

操作系统是Linux CentOS6.5(虚拟机),原生的gcc编译器版本是4.4.7(/usr/bin),为了编译C++11代码我又安装了支持C++11的版本5.2.0(/usr/local/bin),无Nvidia显卡。

安装Caffe的依赖库

先用yum安装Caffe的依赖库:

sudo yum install protobuf-devel leveldb-devel snappy-devel OpenCV-devel boost148-devel hdf5-devel atlas-devel numpy

说明:

执行yum list boost*会显示有boost-devel和boost148-devel两个版本可用,但boost-devel版本是1.41,不满足Caffe的要求(1.47)所以安装boost148-devel。

//不要同时安装1.41,否则有可能产生大量如下编译错误:
‘boost::shared_ptr<boost::error_info<boost::tag_original_exception_type, const std::type_info*>>’到‘const boost::shared_ptr<boost::exception_detail::error_info_base>’的转换有歧义

然后安装gflags,glog,lmdb

sudo yum install gflags-devel glog-devel lmdb-devel

出问题了,yum list并没有找到glog…
于是我索性去github下载了gflags和glob重新编译
gflags下载地址:https://github.com/gflags/gflags
glog下载地址:https://github.com/google/glog

编译gflags

build_gflags.sh

#!/bin/sh
gflags_folder=gflags-master
if [ -d$gflags_folder ]
then 
    rm -fr $gflags_folderfi# 从 https://github.com/gflags/gflags 下载gflags源码 gflags-master.zip解压缩
unzip gflags-master.zip 
pushd$gflags_folder# 执行cmake生成Makefile
mkdir build && cd build
cmake -DCMAKE_CXX_COMPILER:FILEPATH=/usr/bin/g++ -DCMAKE_C_COMPILER:FILEPATH=/usr/bin/gcc -DCMAKE_CXX_FLAGS=-fPIC ..
# 开始编译 24线程
make -j 24sudo make install
cd ..
popd

说明:这里用CMAKE_CXX_COMPILER,CMAKE_C_COMPILER指定使用CentOS6.5原生的编译器4.4.7,不能使用C++11编译器,否则在后续编译Caffe链接阶段会报错:

Undefined reference to xxxx(…std::__cxx11::basic_string … )

同时还要在用CMAKE_CXX_FLAGS指定编译选项-fPIC否则后续编译Caffe过程中也会报错。

编译glog

build_glog.sh

#!/bin/sh
glog_folder=glog-master
if [ -d$glog_folder ]
then 
    rm -fr $glog_folderfi# 从 https://github.com/google/glog 下载glog源码 glog-master.zip解压缩
unzip glog-master.zip 
pushd$glog_folder# 执行cmake生成Makefile
mkdir build && cd build
cmake -DCMAKE_CXX_FLAGS=-fPIC ..
# 开始编译 24线程
make -j 24sudo make install
cd ..
popd

说明:这里用CMAKE_CXX_FLAGS指定编译选项-fPIC否则后续编译Caffe过程中会报错。

编译Caffe

build_caffe.sh:

#!/bin/sh
caffe_folder=caffe-master
if [ -d$caffe_folder ]
then 
    rm -fr $caffe_folderfi# 从 https://github.com/BVLC/caffe 下载Caffe源码 caffe-master.zip解压缩
unzip caffe-master.zip 
pushd$caffe_folder# 执行cmake生成Makefile
mkdir build && cd build
cmake -DCMAKE_CXX_COMPILER:FILEPATH=/usr/bin/g++ -DCMAKE_C_COMPILER:FILEPATH=/usr/bin/gcc -DCPU_ONLY=ON -DBUILD_Python=OFF -DBUILD_python_layer=OFF -DBoost_INCLUDE_DIR=/usr/include/boost148 -DBoost_LIBRARY_DIR=/usr/lib64/boost148 ..
# 开始编译 24线程
make install -j 24cd ..
popd

说明:
-DCMAKE_CXX_COMPILER:FILEPATH=/usr/bin/g++
-DCMAKE_C_COMPILER:FILEPATH=/usr/bin/gcc
如前述指定使用操作系统原生的4.4.7编译器,
如果不加这个参数也能找到原生的编译器,那么这两个参数就可以不加
-DCPU_ONLY=ON
因为我的电脑上没有Nvidia显卡也没有安装cuDNN,所以这里只编译CPU版本
-DBUILD_python=OFF
-DBUILD_python_layer=OFF
不编译Python相关代码
Centos6.5默认安装的python版本(2.6.6)也不满足Caffe的要求(2.7),生成Makefile时会有警告并报错,如果你暂时用不到python相关的特性,可以像我一样把BUILD_python,BUILD_python_layer禁用,否则你就要去安装一个2.7以上版本的python,参见我的另一篇文章《CentOS6.5下为编译Caffe升级python2.6.6到2.7》
-DBoost_INCLUDE_DIR=/usr/include/boost148
-DBoost_LIBRARY_DIR=/usr/lib64/boost148
指定Boost的include和library路径
安装boost148-devel时,boost148的头文件并没有安装在/usr/include/boost,而是安装在/usr/include/boost148/boost下
同样的道理安装boost148-devel时
libboost-*.so文件(比如/usr/lib64/下libboost-filesystem-mt.so)的软连接都安装在/usr/lib64/boost148下而非默认的/usr/lib64下
所以这里要指定boost include文件和library文件路径
-j 代表多线程编译,后面的数字指开启多少个线程进行编译,我编译用的电脑是24核服务器所以设置为24,使用多线程编译可以大大加快编译速度。

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/222565.html<

(0)
管理的头像管理
上一篇2025-04-15 13:36
下一篇 2025-04-15 13:37

相关推荐

  • 云服务器和云虚拟主机怎么选?云服务器和虚拟主机区别

    云服务器适合业务增长快、需弹性扩展的场景,而云虚拟主机适合预算有限、技术门槛低的小型静态网站或测试环境,二者核心区别在于资源独享性与运维复杂度,核心差异解析:从底层架构到使用体验很多人容易混淆这两者,觉得它们都是“买空间建站”,它们的底层逻辑完全不同,云服务器(ECS)就像是你租了一整栋别墅,水电网络独立,你想……

    2026-06-29
    0
  • 赣州智慧旅游招聘是真的吗?赣州旅游人才招聘信息

    中级岗位(3-5年经验)月薪范围通常在6000-10000元,这类岗位需要独立负责项目模块,如独立运营一个抖音账号,或维护一个景区小程序的功能迭代,具备成功案例的候选人议价能力较强,高级岗位(5年以上经验)月薪范围通常在10000-20000元,部分核心管理岗可达更高,这类人才需要具备战略规划能力,如制定整个景……

    2026-06-29
    0
  • 赣州智能物联网车位锁如何管理?智能车位锁管理系统多少钱

    赣州智能物联网车位锁管理的核心在于通过云端平台实现远程控锁、状态实时监控及自动计费,彻底解决传统车位“被占难管”与“找位难”的痛点,在赣州这样的城市,随着机动车保有量的持续增长,老旧小区、商业综合体以及私人固定车位的资源矛盾日益凸显,传统的机械地锁或简易遥控锁,不仅操作繁琐,更无法实现数据化管理,引入智能物联网……

    2026-06-29
    0
  • 赣州智能消防栓好用吗,智能消防栓多少钱一个

    赣州智能消防栓通过物联网技术实现实时监测与远程报警,能显著降低火灾响应时间并提升城市消防安全管理水平,是目前智慧城市建设中不可或缺的基础设施,赣州智能消防栓的核心价值与应用场景传统消防栓往往存在“看不见、摸不着、用不了”的痛点,在赣州这样地形复杂、老城区与新城区并存的区域,传统设施的管理难度极大,智能消防栓的出……

    2026-06-29
    0
  • 云服务器和物理机到底有啥区别?

    云服务器本质上是虚拟化资源池中的弹性实例,而传统物理服务器是独占的硬件实体,前者胜在弹性与运维便捷,后者强在物理隔离与性能稳定,具体选择取决于业务对成本、扩展性及安全合规的权衡,很多人初次接触服务器时,容易把“云服务器”和“传统物理服务器”混为一谈,觉得它们都是用来跑网站或存数据的盒子,这两者的底层逻辑完全不同……

    2026-06-29
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注