使用VS2013編譯Caffe源碼(不帶GPU支持)步驟


1.      從https://github.com/BVLC/caffe/通過git clone下載caffe源碼,master分支,版本號為09868ac:$ git  clone https://github.com/BVLC/caffe.git 

2.      先使用cmake-gui構建生成vs2013工程,發現有很多錯誤,提示缺少各種依賴庫,根據錯誤提示,分別編譯各種依賴庫,下面通過vs2013安裝、編譯各種依賴庫;

3.      安裝、配置NVIDIA CUDA 7.0(網上說使用GPU和不使用,速度上caffe至少要差10倍左右,如果想不使用GPU,在cmake-gui中勾選CPU_ONLY即可):可以參考http://blog.csdn.net/fengbingchun/article/details/44963681

4.      安裝、配置Boost:Boost庫是一個可移植、提供源代碼的C++庫,它是為C++語言標准庫提供擴展的一些C++程序庫的總稱:

(1)、從http://sourceforge.net/projects/boost/files/boost/1.58.0/下載Boost穩定版本1.58.0,如果不想自己編譯Boost源碼,則從http://sourceforge.net/projects/boost/files/boost-binaries/1.58.0/直接下載對應的二進制文件即可,我這里下載的是boost_1_58_0-msvc-12.0-64.exe ;

(2)、雙擊進行安裝,將其安裝到D:\ProgramFiles\local\boost_1_58_0目錄下;

(3)、將D:\ProgramFiles\local\boost_1_58_0\lib64-msvc-12.0添加到系統環境變量Path中;

(4)、添加系統變量,變量名:BOOST_1_58_0,變量值:D:\ProgramFiles\local\boost_1_58_0,重啟電腦;

5.      從https://github.com/gflags/gflags下載GFlags,解壓縮,編譯GFlags,google gflags是google使用的一個開源庫,用於解析命令行標記:

(1)、打開cmake-gui,source code路徑:E:/GitCode/Caffe/src/thirdparty/GFlags/gflags-master和build thebinaries路徑:E:/GitCode/Caffe/src/thirdparty/GFlags/vs2013 ;

(2)、點擊Configure,選擇Visual Studio 12 2013 Win64;

(3)、CMAKE_INSTALL_PREFIX設置為::/GitCode/Caffe/src/thirdparty/GFlags/install;

(4)、點擊Generate,生成vs2013gflags.sln工程;

(5)、打開gflags.sln工程,分別在x64Debug和x64 Release下,點擊ALL_BUILD,重新生成;點擊INSTALL,生成;手動拷貝生成的庫和頭文件放在/install/include和/install/lib目錄下;

6.      從https://github.com/google/glog下載GLog,解壓縮,編譯GLog,google glog是一個記錄日志信息的c++庫:

(1)、用vs2013打開google-glog.sln工程,需要升級到vs2013版本;

(2)、原始工程只有win32配置,需要手動添加Debug 和Release x64配置;

(3)、分別在Debug和Release下,選中解決方案google-glog,重新生成解決方案,會在/glog-master/x64目錄下生成Debug和Release兩個子目錄,將其里面相應的庫拷貝到/GLog/install相應目錄下;

(4)、將源碼中的.h文件拷貝到相應的/GLog/install/目錄下;

7.      從https://github.com/bureau14/leveldb下載LevelDB,解壓縮,編譯LevelDB,它是一個google實現的非常高效的kv數據庫:

(1)、打開cmake-gui,source code路徑:E:/GitCode/Caffe/src/thirdparty/LevelDB/leveldb-master和build thebinaries路徑:E:/GitCode/Caffe/src/thirdparty/LevelDB/vs2013 ;

(2)、點擊Configure,選擇Visual Studio 12 2013 Win64;

(3)、點擊Advanced,將Boost_INCLUDE_DIR設置為D:/ProgramFiles/local/boost_1_58_0/,將CMAKE_INSTALL_PREFIX設置為E:/GitCode/Caffe/src/thirdparty/LevelDB/install,再次點擊Configure;

(4)、點擊Generate,生成vs2013 leveldb.sln工程;

(5)、打開leveldb.sln工程,分別在x64 Debug和x64 Release下,點擊ALL_BUILD,重新生成;點擊INSTALL,生成;手動拷貝生成的庫和頭文件放在/install/include和/install/lib目錄下;

8.      從https://github.com/LMDB/lmdb下載LMDB,解壓縮,編譯LMDB,Lightning Memory-Mapped Database:

(1)、打開vs2013,新建一個名稱為lmdb的空項目;

(2)、將lmdb中的相應.c文件和.h文件加入到此項目中;

(3)、打開屬性頁,分別在Debug和Release下將其配置類型改為:靜態庫(.lib);

(4)、配置x64選項;

(5)、從http://4201a5.l67.yunpan.cn/lk/ccWF2Zge3tyfb密碼是6147,下載3rdparty-2015.7.18.zip,將里面的unistd.h、getopt.h、getopt.c三個文件復制到lmdb源碼並加入工程中;

(6)、修改屬性,將C/C++下SDL檢查設為否(/sdl-),並且將_CRT_SECURE_NO_WARNINGS、_CRT_SECURE_NO_DEPRECATE、_CRT_NONSTDC_NO_DEPRECATE三個宏添加到預處理定義中;

(7)、分別在Debug和Release下編譯,生成lmdb.lib庫,將其庫和相應的頭文件,拷貝到/install/include和install/lib相應目錄下;

9.      從https://github.com/google/protobuf下載ProtoBuf,解壓縮,編譯ProtoBuf,它是一種輕便高效的結構化數據存儲格式:

(1)、打開Cmake-gui,source code路徑:E:/GitCode/Caffe/src/thirdparty/ProtoBuf/protobuf-master/cmake和build thebinaries路徑:E:/GitCode/Caffe/src/thirdparty/ProtoBuf/vs2013;

(2)、點擊Configure,選擇Visual Studio 12 2013 Win64;

(3)、去掉BUILD_TESTING的勾選,將CMAKE_INSTALL_PREFIX設置為E:/GitCode/Caffe/src/thirdparty/ProtoBuf/install,再次點擊Configure;

(4)、點擊Generate,生成vs2013 protobuf.sln工程;

(5)、打開protobuf.sln工程,分別在x64 Debug和x64 Release下,點擊ALL_BUILD,重新生成;點擊INSTALL,生成;手動拷貝生成的庫和頭文件放在/install/include和/install/lib目錄下,將protoc.exe放在/install/bin目錄下;

10.  從https://www.hdfgroup.org/HDF5/release/obtainsrc.html下載HDF5,解壓縮,編譯HDF5,它是一個層次型的數據存儲格式:

(1)、打開cmake-gui,source code路徑:E:/GitCode/Caffe/src/thirdparty/HDF5/hdf5-1.8.15-patch1和build thebinaries路徑:E:/GitCode/Caffe/src/thirdparty/HDF5/vs2013;

(2)、點擊Configure,選擇Visual Studio 12 2013 Win64;

(3)、再次點擊Configure,點擊Generate,生成HDF5.sln工程;

(4)、打開HDF5.sln工程,分別在x64 Debug和x64 Release下,點擊ALL_BUILD,重新生成;手動拷貝生成的庫和頭文件放在/install/include和/install/lib目錄下;

11.  從https://github.com/google/snappy下載snappy,解壓縮,從https://github.com/kmanley/snappy-msvc下載snappy-msvc,解壓縮,它是一個用C++實現的用來壓縮和解壓縮的庫:

(1)、打開snappy-msvc-master目錄下的snappy.sln工程,升級到vs2013;

(2)、添加x64解決方案平台;

(3)、從http://www.maspick.co.il/ddd/chromium/src/third_party/snappy/win32/snappy-stubs-public.h下載snappy-stubs-pulic.h文件,將其拷貝到/snappy-master目錄下;

(4)、解決工程的error C2589:打開snappy屬性頁,分別在Debug和Release下,預處理定義中添加NOMINMAX;

(5)、在Debug和Release下,分別點擊snappy工程,重新生成,會生成snappy.lib靜態庫;

(6)、將生成的靜態庫和頭文件拷貝到/install/include和/install/lib目錄下;

12.  編譯不帶CUDA支持的OpenCV2.4.9 x64動態庫:可以參考http://blog.csdn.net/fengbingchun/article/details/8778121

13.  從http://sourceforge.net/projects/openblas/files/v0.2.14/下載OpenBLAS-v0.2.12-Win64-int64.zip,解壓縮,它是一個優化的Blas庫,將里面的libopenblas.dll.a改成libopenblas.lib;

14.  使用CMake(cmake-gui)生成Caffe.sln工程:暫時沒有成功,先作個記錄,后面有時間再調試吧

(1)、打開vs2013,新建一個空項目caffe-vs2013,分別在Debug和Release下,配置解決方案平台為x64,將配置屬性中的配置類型改為動態庫(.dll);

(2)、利用ProtoBuf中的protoc.exe,通過/caffe/caffe/src/caffe/proto/caffe.proto文件生成caffe.pb.h和caffe.pb.cc:打開命令提示符,將protoc.exe拷貝到/proto目錄下,執行:protoc.exe caffe.proto --cpp_out=./ ;

(3)、在/caffe/caffe/include/caffe目錄下新建一個proto子目錄,將caffe.pb.h和caffe.pb.cc兩個文件拷貝到此目錄下;

(4)、打開cmake-gui,source code路徑:E:/GitCode/Caffe/src/caffe/caffe和build the binaries路徑:E:/GitCode/Caffe/src/caffe/vs2013;

(5)、點擊Configure,選擇Visual Studio 12 2013 Win64;

(6)、設置Boost_INCLUDE_DIR為D:/ProgramFiles/local/;

(7)、設置GFlags選項見下圖:


(8)、設置GLog選項見下圖:


(9)、設置ProtoBuf選項見下圖:


(10)、設置HDF5選項見下圖:


(11)、設置LMDB選項見下圖:


(12)、設置LevelDB選項見下圖:


(13)、設置Snappy選項見下圖:


(14)、設置OpenCV_DIR為D:/soft/OpenCV2.4.9/opencv/sources;

(15)、設置OpenBLAS選項見下圖:


(16)、再次點擊Configure,點擊Generate,生成Caffe.sln工程。

15.  上面直接用CMake沒有成功,下面手動添加生成Caffe.sln工程:

(1)、用vs2013新建一個控制台空工程caffe-vs2013,解決方案平台由Win32設置成x64;

(2)、設置CUDA支持:項目(P) -> 生成自定義(B)… -> 勾選CUDA 7.0(.targets, .props),點擊確定,默認先使用不支持GPU進行編譯,在工程中添加CPU_ONLY宏;

(3)、添加/caffe/src/caffe目錄下的文件逐個進行編譯,先編譯/src/caffe當前目錄下的10個.cpp文件,如下圖:


(4)、caffe所有的依賴文件全部放在thirdparty目錄下,將相應的頭文件以及庫文件加入到工程中,見下圖:


(5)、對以上11個.cpp文件逐個進行編譯,根據錯誤提示進行逐一解決;

(6)、將/caffe/src/caffe/layers目錄下的.cpp文件加入到工程中,進行編譯;

(7)、將/caffe/src/caffe/util目錄下的.cpp文件加入到工程中,進行編譯;

(8)、將/caffe/src/caffe/proto目錄下的.cpp文件加入到工程中,進行編譯,此.cc文件由上面的14.2步驟生成;

16.  編譯caffe-vs2013工程,生成caffe-vs2013動態庫。


說明

(1)、以上能夠正確生成caffe-vs2013動態庫,但是使用的時候發現光動態庫,並沒有對應的靜態庫產生。因此為了調用的方便將工程改為生成靜態庫,修改方法為:將工程屬性 -> 常規 -> 配置類型,由原來的動態庫(.dll)改為靜態庫(.lib)即可,其它均無需修改,或者自己新創建一個靜態庫工程,將相關caffe文件加入到工程中;

(2)、若想使生成的caffe靜態庫能夠在windows下正常使用,還需幾個額外的動態庫,可以直接從 https://drive.google.com/file/d/0B_G5BUend20PTEJ0cGIyZ0czVmc/view 下載。 

GitHubhttps://github.com/fengbingchun/Caffe_Test

參考文獻:

1.      https://initialneil.wordpress.com/

2.      http://wenku.baidu.com/link?url=ik_0Yf6ZixtG10cXXoaDRkTVrDNf9o3mmAI8-c48AhKunsOHX0JNSG_e4yVMiH9TVcZuxggQqqMC5HhAZ46KSaAs4kmCSRfD3taWpbksDv7


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com