原文連接:http://blog.csdn.net/joshua_1988/article/details/45036993
html
有少許修改................
linux
2014年4月的時候本身在公司就將Caffe移植到Windows系統了,今年本身換了臺電腦,想在家裏也隨便跑跑,原本也裝了Ubuntu能夠很方便的配置好,無奈在家的風格是「娛樂的時候抽空學習」,因此移植到Windows仍是頗有必要的。可是,公司禁止將公司內部資料帶出,不少地方又都忘記了,週末磨了一天終於移植完,本篇爲記錄將Caffe移植至Windows7 x64系統下的一些關鍵步驟。第一步先看看這老些依賴庫怎麼搞。git
在真正開始編譯各依賴庫以前,須要準備一些必備工具:github
首先固然是VS2013,下載地址:https://www.visualstudio.com/數據庫
其次是 CMake工具,下載地址:http://www.cmake.org/download/
bootstrap
(CMake要使用最新版本,不然沒法識別 Dev12......)windows
1.Boostapp
下載地址:http://www.boost.org/工具
編譯方法:visual-studio
1) 運行Visual Studio Tools中的VS2013 x64 Cross Tools Command Prompt終端工具
2) 從終端進入boost庫所在目錄,如D:\LIBS\boost_1_57_0
3) 運行bootstrap.bat生產64位的bjam.exe
4) 輸入命令進行編譯,更正一下,msvc-12.0纔是vs2013哈,感謝halooooJeffrey http://weibo.com/2211847364
靜態庫:
bjam --build-type=complete
toolset=msvc-9.0toolset=msvc-12.0 threading=multi link=static address-model=64共享庫:
bjam --build-type=complete
toolset=msvc-9.0toolset=msvc-12.0 threading=multi link=shared address-model=64
(使用Bjam編譯仍是比較蛋疼的,直接在GIt上下載EXE安裝版本就行了......)
2.OpenCV
下載地址:http://opencv.org/downloads.html 本文中使用的是2.4.10版本
編譯方法:
下載後的安裝包中有已編譯好的庫,可直接引用,如D:\LIBS\opencv\build\x64\vc12
(若是不是使用Linux,仍是直接安裝就好,不要本身編譯,很麻煩.....)
3.OpenBlas
下載地址:http://sourceforge.net/projects/openblas/files/
編譯方法:
OpenBlas庫在windows上編譯起來比較複雜,這裏給出的下載地址是一個已編譯好的壓縮包OpenBLAS-v0.2.14-Win32.zip (12.1 MB),直接提供了./bin ./include ./lib路徑...(贊 原做者...)
4.CUDA
下載地址:https://developer.nvidia.com/cuda-downloads
編譯方法:
與OpenCV相似,安裝好後直接有已編譯好的庫。如C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.0\include和C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.0\lib\x64
以上是依賴庫比較經常使用,最好將該它們的include和lib加入到Windows的環境變量中,方便後續的庫的編譯
5.GFlags
下載地址:https://github.com/gflags/gflags
編譯方法:
1) 啓動CMake(cmake-gui)工具
2) 設置source code路徑和build路徑
3) 單擊Configure按鈕,並選擇並選擇Visual Studio 12 2013 Win64編譯器編譯器
4) 更新完成後,勾選中BUILD_SHARED_LIBS和BUILD_STATIC_LIBS
5) 單擊Generate按鈕,生成VS工程
6) 打開剛剛生成的VS工程,build其中的ALL_BUILD工程,注意選擇x64模式,並分別生成Debug和Release下的庫
7) 編譯成功後,在工程路徑下會生成bin、include、lib三個文件夾
6.GLog
下載地址:https://github.com/google/glog
編譯方法:
該工程中包含VS工程google-glog.sln,打開直接編譯便可,一樣注意Solution Platform選擇x64模式,並分別生成Debug和Release下的庫
7.LevelDB
下載地址:https://github.com/bureau14/leveldb
這裏沒有選擇官方的https://github.com/google/leveldb是因爲官方版本移除了CMake的依賴項,本身寫起來比較複雜
編譯方法:
與編譯GFlags方法相似,惟一須要注意的地方是將CMakeLists.txt中第82行的-DSNAPPY註釋掉,不然須要依賴Snappy庫,其實並不絕對須要,爲了簡單起見將此庫去掉。另外Leveldb 依賴於 boost 庫,若是沒有將boost庫添加至環境變量,可能須要手動進行設置。
8.LMDB
下載地址:https://gitorious.org/mdb/mdb/archive/462dc097451834477b597447af69c5acc93182b7.tar.gz
編譯方法:
1) 解壓壓縮包到某路徑,例如D:\CODE\CXX\mdb-mdb
2) 在VS2013中新建工程,FILE --> New --> Project From Existing Code..
3) 選取源碼所在路徑,並給工程起名
4) 單擊next按鈕後選擇Project type爲Console application project
5) 將Solution Platform修改成x64模式
6) 注意將工程的輸出改成靜態庫,右鍵單擊工程 --> property --> Configuration Properties --> General --> Project Default --> Configureation Type --> Static library (.lib)
7) 其中一個.c文件中包含了unistd.h,爲了解決這個問題須要準備三個文件 unistd.h、getopt.h、getopt.c。unistd.h能夠考http://stackoverflow.com/questions/341817/is-there-a-replacement-for-unistd-h-for-windows-visual-c解決。另外兩個能夠從http://ieng6.ucsd.edu/~cs12x/vc08install/getopt9.zip下載
8) 最後編譯便可(如果 添加unistd.h 以後 仍然顯示沒法找到unistd.h,重啓一下電腦就能夠找到了!!! 仍是不行????
在linux下編譯的程序必須包含 unistd.h文件,可是VC裏面是沒有的,因此必須寫一個到 VC的包含目錄...
因此必須把這個頭文件加入到VS2012的頭文件庫裏面,其它的編譯器也是如此,對於VS2012來講只要在你的默認庫文件夾下(個人電腦是C:\Program Files(X86)\Microsoft Visual Studio 12.0\VC\include)添加一個unistd.h文件便可。而後再把那兩個Getopt文件也添加進去... 成功!)
9.ProtoBuf
下載地址:https://github.com/google/protobuf
編譯方法:
壓縮包裏有一個叫vsprojects的文件夾,其中有現成的VS工程,能夠用來直接編譯,也須要注意將Solution Platform修改成x64模式
( 對於: error C1041: 沒法打開程序數據庫vc120.pdb 解決方法如連接所示:在麼一個工程 出現Visual Studio 2013 fatal error C1041 /FS 解決方案是爲單個項目添加 /FS (Force Synchronous PDB Writes) 編譯選項,
在C:\Tools\protobuf-master\src\google\protobuf\compiler\mock_code_generator.cc 出現 #include <gtest/gtest.h> 找不到的現象!爲何?)
(參考:http://stackoverflow.com/questions/10945386/cannot-open-include-file-gtest-h-no-such-file-or-directory
必須 編譯安裝gtest,完成測試功能...)
10.HDF5
下載地址:http://www.hdfgroup.org/ftp/HDF5/current/src/CMake/hdf518-CMakeWindows.zip
編譯方法:
解壓後,在VS2013 x64 Cross Tools Command Prompt終端工具中運行build-VS2013-64.bat便可。
(CMake Error at HDF518CMake.cmake:6 (cmake_minimum_required):
CMake 3.1.0 or higher is required. You are running version 3.0.2 ,看來Cmake又得更新了...編譯結果出現failed!不知道運行起來怎麼樣???43% Test Failed,1129 of 1975 failed!
)
若是直接安裝可使用的話,就不要本身編譯HDF5了。
整理頭文件和庫文件
將5-10的頭文件和編譯後的庫統一整理到一個3rdparty文件夾下,其中包含兩個文件夾include和lib
include文件夾下包含gflags、glog、google、hdf五、leveldb、lmdb六個文件。gflags的頭文件來自於生成的VS工程目錄中的include文件夾;glog的頭文件來自於VS工程目錄中的src\windows文件夾;google中是protobuf的頭文件,來自於壓縮包中的src\google文件夾;hdf5來自於壓縮包中的CMake\hdf5-1.8.14\src文件夾,保留.h文件便可;leveldb的頭文件來自於壓縮包的include文件夾;lmdb的頭文件來自於壓縮包中的libraries\liblmdb文件夾,保留.h文件便可
lib文件夾中的.lib文件直接從編譯好的工程目錄下拷貝便可,注意debug模式下的.lib文件的文件名修改成xxxd.lib形式
至此,caffe須要的各項依賴庫已經準備完畢,後續會上一些圖,看起來直觀一些。
11.開始編譯Caffe..................
使用Cmake編譯Caffe............
配置Cmake時使用glog包含,包含src/Windows文件夾,若使用src裏面修改後綴的/glog/logging.h,則出現@字符串錯誤,一時難解。
配置Cmake的包含目錄後,在使用VS編譯時仍會發現找不到 「google/protobuf/stubs/common.h」文件,挺蛋疼..................
使用VS編譯時,發現caffe.pd.h始終會被修改成 <google/protobuf/stubs/common.h>,即便設定爲只讀,只要一編譯,就會自動修改成原文件,真是醉了!醉了......
因此,編譯失敗了...........
出現@字符串錯誤:把包含的 windows/glog 替換 glog裏面的文件;
編譯成功.............................