新聞中心
最近開(kāi)始學(xué)習(xí)Caffe,準(zhǔn)備工作就是要把Caffe的開(kāi)發(fā)環(huán)境建立起來(lái),首先就是要能成功編譯Caffe,買(mǎi)了一本Caffe入門(mén)書(shū):《深度學(xué)習(xí):21天實(shí)戰(zhàn)Caffe》,上面有詳細(xì)的Caffe編譯說(shuō)明。原本以為照著說(shuō)明步驟一步步往下走就能一輕松完成編譯,實(shí)際情況卻比我想象的復(fù)雜了。
先說(shuō)明一下我的電腦環(huán)境:

創(chuàng)新互聯(lián)擁有10余年成都網(wǎng)站建設(shè)工作經(jīng)驗(yàn),為各大企業(yè)提供成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)服務(wù),對(duì)于網(wǎng)頁(yè)設(shè)計(jì)、PC網(wǎng)站建設(shè)(電腦版網(wǎng)站建設(shè))、成都APP應(yīng)用開(kāi)發(fā)、wap網(wǎng)站建設(shè)(手機(jī)版網(wǎng)站建設(shè))、程序開(kāi)發(fā)、網(wǎng)站優(yōu)化(SEO優(yōu)化)、微網(wǎng)站、域名申請(qǐng)等,憑借多年來(lái)在互聯(lián)網(wǎng)的打拼,我們?cè)诨ヂ?lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)積累了很多網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、網(wǎng)絡(luò)營(yíng)銷(xiāo)經(jīng)驗(yàn),集策劃、開(kāi)發(fā)、設(shè)計(jì)、營(yíng)銷(xiāo)、管理等網(wǎng)站化運(yùn)作于一體,具備承接各種規(guī)模類(lèi)型的網(wǎng)站建設(shè)項(xiàng)目的能力。
操作系統(tǒng)是Linux centos6.5(虛擬機(jī)),原生的gcc編譯器版本是4.4.7(/usr/bin),為了編譯C++11代碼我又安裝了支持C++11的版本5.2.0(/usr/local/bin),無(wú)Nvidia顯卡。
安裝Caffe的依賴(lài)庫(kù)
先用yum安裝Caffe的依賴(lài)庫(kù):
sudo yum install protobuf-devel leveldb-devel snappy-devel OpenCV-devel boost148-devel hdf5-devel atlas-devel numpy
說(shuō)明:
執(zhí)行yum list boost*會(huì)顯示有boost-devel和boost148-devel兩個(gè)版本可用,但boost-devel版本是1.41,不滿(mǎn)足Caffe的要求(1.47)所以安裝boost148-devel。
//不要同時(shí)安裝1.41,否則有可能產(chǎn)生大量如下編譯錯(cuò)誤:
‘boost::shared_ptr >’到‘const boost::shared_ptr’的轉(zhuǎn)換有歧義
然后安裝gflags,glog,lmdb
sudo yum install gflags-devel glog-devel lmdb-devel
出問(wèn)題了,yum list并沒(méi)有找到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_folder
fi
# 從 https://github.com/gflags/gflags 下載gflags源碼 gflags-master.zip解壓縮
unzip gflags-master.zip
pushd $gflags_folder
# 執(zhí)行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 ..
# 開(kāi)始編譯 24線(xiàn)程
make -j 24
sudo make install
cd ..
popd
說(shuō)明:這里用CMAKE_CXX_COMPILER,CMAKE_C_COMPILER指定使用CentOS6.5原生的編譯器4.4.7,不能使用C++11編譯器,否則在后續(xù)編譯Caffe鏈接階段會(huì)報(bào)錯(cuò):
Undefined reference to xxxx(…std::__cxx11::basic_string … )
同時(shí)還要在用CMAKE_CXX_FLAGS指定編譯選項(xiàng)-fPIC否則后續(xù)編譯Caffe過(guò)程中也會(huì)報(bào)錯(cuò)。
編譯glog
build_glog.sh
#!/bin/sh
glog_folder=glog-master
if [ -d $glog_folder ]
then
rm -fr $glog_folder
fi
# 從 https://github.com/google/glog 下載glog源碼 glog-master.zip解壓縮
unzip glog-master.zip
pushd $glog_folder
# 執(zhí)行cmake生成Makefile
mkdir build && cd build
cmake -DCMAKE_CXX_FLAGS=-fPIC ..
# 開(kāi)始編譯 24線(xiàn)程
make -j 24
sudo make install
cd ..
popd
說(shuō)明:這里用CMAKE_CXX_FLAGS指定編譯選項(xiàng)-fPIC否則后續(xù)編譯Caffe過(guò)程中會(huì)報(bào)錯(cuò)。
編譯Caffe
build_caffe.sh:
#!/bin/sh
caffe_folder=caffe-master
if [ -d $caffe_folder ]
then
rm -fr $caffe_folder
fi
# 從 https://github.com/BVLC/caffe 下載Caffe源碼 caffe-master.zip解壓縮
unzip caffe-master.zip
pushd $caffe_folder
# 執(zhí)行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 ..
# 開(kāi)始編譯 24線(xiàn)程
make install -j 24
cd ..
popd
說(shuō)明:
-DCMAKE_CXX_COMPILER:FILEPATH=/usr/bin/g++
-DCMAKE_C_COMPILER:FILEPATH=/usr/bin/gcc
如前述指定使用操作系統(tǒng)原生的4.4.7編譯器,
如果不加這個(gè)參數(shù)也能找到原生的編譯器,那么這兩個(gè)參數(shù)就可以不加
-DCPU_ONLY=ON
因?yàn)槲业碾娔X上沒(méi)有Nvidia顯卡也沒(méi)有安裝cuDNN,所以這里只編譯CPU版本
-DBUILD_python=OFF
-DBUILD_python_layer=OFF
不編譯Python相關(guān)代碼
Centos6.5默認(rèn)安裝的python版本(2.6.6)也不滿(mǎn)足Caffe的要求(2.7),生成Makefile時(shí)會(huì)有警告并報(bào)錯(cuò),如果你暫時(shí)用不到python相關(guān)的特性,可以像我一樣把BUILD_python,BUILD_python_layer禁用,否則你就要去安裝一個(gè)2.7以上版本的python,參見(jiàn)我的另一篇文章《CentOS6.5下為編譯Caffe升級(jí)python2.6.6到2.7》
-DBoost_INCLUDE_DIR=/usr/include/boost148
-DBoost_LIBRARY_DIR=/usr/lib64/boost148
指定Boost的include和library路徑
安裝boost148-devel時(shí),boost148的頭文件并沒(méi)有安裝在/usr/include/boost,而是安裝在/usr/include/boost148/boost下
同樣的道理安裝boost148-devel時(shí)
libboost-*.so文件(比如/usr/lib64/下libboost-filesystem-mt.so)的軟連接都安裝在/usr/lib64/boost148下而非默認(rèn)的/usr/lib64下
所以這里要指定boost include文件和library文件路徑
-j 代表多線(xiàn)程編譯,后面的數(shù)字指開(kāi)啟多少個(gè)線(xiàn)程進(jìn)行編譯,我編譯用的電腦是24核服務(wù)器所以設(shè)置為24,使用多線(xiàn)程編譯可以大大加快編譯速度。
本文題目:CentOS6.5編譯Caffe過(guò)程記錄(系統(tǒng)存在多個(gè)編譯器)
轉(zhuǎn)載注明:http://www.5511xx.com/article/dhgsccg.html


咨詢(xún)
建站咨詢(xún)
