配置记录:CMake管理项目-Caffe在windows平台的C++编译安装及其依赖项

节约时间请直接看 ‘三-5’,前面都是过程记录

一 起因

由于实验需要,要安装一下caffe,并集成进C++项目。当然,是通过CMake来管理的。接触的包越多,越感觉CMake方便好用。

导师让我去看一下Caffe,说是不难,然后我就去网上开始找,虽然之前也看过一下caffe的情况,但是需要安装配置的东西还是挺多的,而且很多我并不了解,所以还是一边安装,一边记录,弄一个汇总的东西,记录一下过程中我遇到的一些问题和心得,以后也好查看。

还有一个原因,我在弄OpenCV的时候,发现这个不像VTK,该库有一个不好的行为:VTK的cmake构建默认只有常规组件,可以选择不同的扩展。而OpenCV不然,就比如说,我电脑上有matlab,那cmake的时候,OpenCV会要求编译matlab的部件,再有,我装了cuda,也是要牵扯到,然后还有VTK,OpenCV会自动选中with_vtk。可我不需要这么多啊,尤其是matlab。

二 项目环境

项目是医学图像相关,所以已经使用了VTK和ITK,这两个包也是给我构建的头大,好在已经有几年了,配置项早就烂熟于心了。
我的电脑上已经有的包库或者运行环境,我罗列一下(下面所说都是添加进了 环境变量PATH 的):

  • win10系统,vs2013环境(还有VS2015),64位
  • VTK8(cmake结果)
  • ITK4.12(cmake结果)
  • java1.7(JDK)
  • doxygen(exe)
  • cuda8(我拷贝进去了cudnn5)
  • matlab2014(exe)
  • python3.5(anaconda)
  • perl 5
  • ruby 2
  • Qt 5.5

三 正式开始

0 先上Caffee的主页

http://caffe.berkeleyvision.org/installation.html
这个是caffee的安装主页,首先看的时候,先看这个页面,然后在去最上面看相对应OS的具体页面。
https://github.com/BVLC/caffe/tree/windows
比如我的是windows下,先看到有这样几个依赖:

  • CUDA
  • BLAS 可以是 ATLAS, MKL, 或 OpenBLAS.
  • Boost >= 1.55
  • protobuf, glog, gflags, hdf5
  • OpenCV 可选
  • lmdb, leveldb可选
  • cuDNN 可选
  • c
    然后看到windows那个页面,有这样几个依赖:
  • VS2013/2015
  • CMake3.4+
  • python 为pycaffe接口 可选
  • matlab 为matcaffe 接口 可选
  • CUDA 可选
  • cuDNN 可选

尴尬的是CUDA到底是可选还是必须???管他呢,反正我是已经装上了。

看了看大概,那么就有一些思路了:
首先确定的一点是,caffe一定是不能使用编译好的。因为我需要调试,需要集成进项目,不能没有源代码。其他的一些细枝末节,倒是可以考虑编译好的,比如openblas。
每搞定一个,用cmake测一下看能不能找到对应的模块。比如设置好了CUDA,我引入一下OpenCL,看看能不能找到CUDA的lib里面。以此类推,都这样搞一下,确保每步安装正确。

1 CUDA

这个我之前就装上了,当时是为了OpenCL的头文件,想想啊当时也是挺醉的,为这么个小东西,装了个CUDA。但是单独的OpenCL库有很难找到。而且OpenCL在各个显卡实现不一样。
cuda倒是傻瓜式安装,点点鼠标,下一步下一步。cudnn是直接把文件拷贝到cuda的对应目录,感觉和搞破解似的=。=

记得检查CUDA是否在PATH环境变量里面有这个值,一般自动会加上。

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\libnvvp

2 OpenBLAS

atlas我也下载了,但是atlas并木有适合CMake的,就是没有***Config.cmake文件,而且CMake\share\cmake-3.7\Modules中也没有FindAtlas.cmake,所以还是放弃吧。MKL没看,欢迎大家补正。

先上参考页:
http://blog.csdn.net/u013143795/article/details/51581512
http://www.openblas.net/ 官网

OpenBLAS,我一开始下载的是0.2.20(sourceforge),最新版,因为这种小的基础的依赖包,不太可能要单步debug,所以还是省点事。然鹅,没有发现文中说的windows安装包,只能下载到代码。然后是我辗转许久才发现,我到0.2.19文件夹(sourceforge)里面就看到了,我去。。。
我下载了两个东西:

  1. OpenBLAS-v0.2.19-Win64-int32.zip 这个是win64的编译结果
  2. OpenBLAS 0.2.20 version.zip 这个是源代码

一开始尝试的是2,尝试自己编译结果各种问题,推荐1。第一个打开就是lib,include,bin文件夹,然后在lib/cmake/openblas文件夹中有这个OpenBLASConfig.cmake以及OpenBLASConfigVersion.cmake。这就是cmake的接口了。所以不必去自己编译,编译好的也有cmake接口。

注意:参考文中提到说要MinGW,是因为官方的安装文档就这么说的。实测发现需要两个GNU组件sed.exe和awk.exe,但是蛋疼的是,这两个东西我单独安装之后,VS也并不能编译通过,似乎就是需要MinGW的编译才行。使用编译好的,就相当简单,解压就行。然鹅,cmake没有提供FindOpenBLAS.cmake,那么还是得在配置时候指定这个路径。

注意2:在caffe源代码的cmake文件夹中,我找到FindOpenBLAS.cmake这样一个文件,真棒。。。其实就是写inc和lib的位置,既然有写好的,那么在caffe引入的时候肯定会引入的,而且这个文件还可以单独拷贝出来,以备以后再用。另外,在caffe/cmake/Modules里面有好多找模块的Find文件。

3 Boost

这个头大了一下。首先是调参数。
我的电脑上还装了VS2015,所以默认的编译器是2015,但是我用的2013。所以要调一下编译器。

设置参数的参考:
http://www.boost.org/build/doc/html/index.html
这个是boost的官网配置指导,有精力可以慢慢寻找各种配置。然后Boost.Build, b2, bjam 和Perforce Jam不同也有说明,貌似都可以用来编译boost。
http://blog.csdn.net/zengraoli/article/details/70187556
这个说明比较清晰,使用的bjam
http://blog.csdn.net/wangxvfeng101/article/details/47002853
这个提到了64和32,用的b2

其实也可以使用–help来查看各种参数。两个exe输出的东西是一样的。

查了一下,发现boost之前有一个模块化项目,但是貌似废止了,大家都是用指定环境变量的形式,就是有一个Boost_DIR,指向根目录,查了一下CMake的FindBoost貌似也是就需要环境变量。。。

我尝试使用boost1.60(通过查FindBoost得知,还是搞一个存在定义的版本的比较靠谱,cmake3.7的是最高到1.61)。

目录如下:

boost_1_60_0
|
|----boost_1_60_0-源代码,b2在这里面
|----build-构建打算放在这,通过–build-dir指定
|----install-包括stage都放在这了,通过–prefix指定

命令如下:
bjam install stage --prefix=../install --toolset=msvc-12.0 --stagedir=../install/stage address-model=64 --build-dir=../build --build-type=complete link=shared runtime-link=shared threading=multi debug release
//解释:构建并安装,使用msvc-12.0(就是vs2013编译器),stage保存在../install/stage,使用64位模式,构建中间产物路径在../build,构建类型是完全(默认是最小库),链接方式为动态(还可以指定静态static),运行时链接也是动态,使用多线程模式,同时构建debug和release两个版本(也就是两种库,debug带d后缀,比如boost_atomic-vc120-mt-1_60和boost_atomic-vc120-mt-gd-1_60)。
生成结果:

有些错误,但大都成功,添加环境变量BOOST_ROOT(D:\cxxlib\boost_1_60_0\install),然后在其他项目中是可以找到对应模块的。

find_package(Boost COMPONENTS system REQUIRED)

但是,生成过程中产生了问题,说是C1001 编译器内部错误,我尝试只编译某一个库,比如thread,也是出这个错,看来躲不过去了。从网上查看之后,发现貌似是VS2013太老了,我需要一个超大的update5(5G+)。

链接从哪找的也忘了:
http://download.microsoft.com/download/A/F/9/AF95E6F8-2E6E-49D0-A48A-8E918D7FD768/vs2013.5.iso

错误解决的两个参考:
http://bbs.csdn.net/topics/391838028?page=1 一楼回答
http://www.mamicode.com/info-detail-1858755.html
这两个文章中说明了情况,我去下载了update5,等安装好我再跑一次boost。

最终…updated 13461 targets…,没有报错。

find_package(Boost COMPONENTS thread system filesystem program_options REQUIRED)

再次测试,是可以的,cmake输出:

Boost version: 1.60.0
Found the following Boost libraries:
  thread
  system
  filesystem
  program_options
  chrono
  date_time
  atomic

4 OpenCV

参考:
http://blog.csdn.net/longji/article/details/77885076

主要是看的这个。。。还有要关掉几个选项:
BUILD_DOC 构造一个帮助文档,需要doxygen
BUILD_PACKAGE 构造一个exe的安装包,需要perl
各种TEST 测试,浪费时间。。。注意选择INSTALL目录

然后由于我电脑上有CUDA,要不是我不知道怎么关,我也会关掉的。CUDA给出的选项太多。
然后是61个项目,opencv3.3,编译挺费时间的。
先ALL_BUILD,然后INSTALL,生成并安装。添加环境变量OPENCV_ROOT(D:\cxxlib\opencv-330\install,就是cmake设置里面设置的cmake-install-prefix),也就是OpenCVConfig.cmake所在目录。在其他地方使用

find_package(OpenCV REQUIRED)

就可以找到了。

5 接着看文档-Caffe

http://caffe.berkeleyvision.org/installation.html

我下载的是caffe-windows。点开brach那里,还有很多其他版本。这是Caffe的
https://github.com/BVLC/caffe/tree/windows

当然还有微软封装的,属于微软自己的项目
https://github.com/Microsoft/caffe
这个是微软封装过,直接就有Caffe.sln,可以在props文件中改属性,那是微软那一套了。

cmake时候发生一个问题:
CMake Error at cmake/WindowsDownloadPrebuiltDependencies.cmake:41 (message):
Could not find url for MSVC version = 1800 and Python version = 3.5.
我查了一下那个文件中的40行。发现了问题,是这样一个判断:

if(NOT DEFINED DEPENDENCIES_URL_${MSVC_VERSION}_${_pyver})

我输出看到MSVC_VERSION=1800,_pyver=35,也就是说,对应的python和VS都找到了,那是什么没找到呢?
我用VS2015就不会出这个错, 所以是VS2013没有找到python3支持

如果不构建python,就没这事了,caffe会默认构建针对python2.7。
如果不构建python,直接就跳过这个,开始下载其他依赖库了。。。所以,我暂时跳过这个。

然鹅,等我等待下载完成后,发现除了CUDA,人家都是自己下载的>_<~,这。。。。。
我觉得心脏受到了暴击。。。最后瞎下载完成的列表:
BLAS : Yes (Open)
Boost : Yes (ver. 1.61)
glog : Yes
gflags : Yes
protobuf : Yes (ver. 3.1.0)
lmdb : Yes (ver. 0.9.70)
LevelDB : Yes (ver. 1.18)
Snappy : Yes (ver. 1.1.1)
OpenCV : Yes (ver. 3.1.0)
CUDA : Yes (ver. 8.0)
除了cuda是我的,其他的都是下载的。。。。好吧。。。那就这样吧。。。先编译了再说。。其实cuda也不需要,不要cuda,默认编译CPU_ONLY版本。

按理来说,到这里就算完成了,点开sln项目,编译,安装,就搞定了,但是,这里还有一些东西。。。我不甘心没有python。。。

直到我看到这个,我才理解错误的意思,就是说没有打包的支持包给我下载,对应版本是1800和py3.5。
http://blog.csdn.net/u011728480/article/details/78834630
如果怕下载慢,也可以去这个列表里面下载,具体的情况参考文章里面也有说明。
这里有一个caffe-windows可以下载的依赖包的列表:
https://github.com/willyd/caffe-builder/releases/
可以看到,python3,只有从14.0才开始支持,也就是目前来说,

VS2013和python3不可兼得###

要么用VS2015,要么python2。

没有python不行啊,还得从其他人那弄算法和做实验呢。

6 重装python2

重新下载了Anaconda2 5,也是5,anaconda3也是5,但就为了不同python版本,分了两个。

这下,cmake caffe直接就可以过了。

你可能感兴趣的:(记录,c语言,cmake,caffe安装)