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 下载。

GitHub:https://github.com/fengbingchun/Caffe_Test

参考文献:

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

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

Windows7上使用VS2013编译Caffe源码(不带GPU支持)步骤相关推荐

  1. windows下编译pcl-master源码(带GPU)

    参考博客 1.http://pointclouds.org/documentation/tutorials/compiling_pcl_windows.php#compiling-pcl-window ...

  2. 最新UI界面漫画小程序源码,带后台支持流量主,24小时全自动更新!

    前言 今天给大家带来一款漫画小程序源码,带后台支持流量主,24小时自动更新,亲测可用,小程序UI我简单的修改了一下,漫画24小时自动更新,免维护,支持流量主,搭建宣传一波等裂变即可! 安装教程 准备工 ...

  3. java调用caffe_Caffe中master与windows分支差异对比及通过命令提示符编译Caffe源码操作步骤...

    目前GitHub https://github.com/fengbingchun/Caffe_Test  中的caffe还是依赖较老的版本,更新于2015.08.15,commit为09868ac,近 ...

  4. Windows10上使用VS2017编译MXNet源码操作步骤(C++)

    MXNet是一种开源的深度学习框架,核心代码是由C++实现.MXNet官网推荐使用VS2015或VS2017编译,因为源码中使用了一些C++14的特性,VS2013是不支持的.这里通过VS2017编译 ...

  5. Ubuntu 14.04上使用CMake编译MXNet源码操作步骤(Python)

    MXNet源码版本号为1.3.0,其它依赖库的版本号可参考:https://blog.csdn.net/fengbingchun/article/details/84997490 . 为了通过编译源码 ...

  6. Mac上下载及编译android源码

    参考: https://blog.csdn.net/u010963246/article/details/71480684 https://blog.csdn.net/qq_25333681/arti ...

  7. Ubuntu 14.04上使用CMake编译MXNet源码操作步骤(C++)

    MXNet源码版本号为1.3.0,其它依赖库的版本号可参考:https://blog.csdn.net/fengbingchun/article/details/84997490 build.sh脚本 ...

  8. VS2013编译OBS源码

    obs源码来之:https://sourceforge.net/projects/obsproject/ 下载源码之后直接打开sln索引文件就行 项目打开之后 obs作为启动项 直接编译就行,正常应该 ...

  9. Python 源码剖析(一)—— vs2013 编译 python 源码

    参考 windows环境下编译python 准备 VS 2013(其实 vs 版本编译的差异不大,设置也基本相同) python 源码文件: Python-2.7.3.tgz 编译 (1)解压 Pyt ...

最新文章

  1. 接口中定义变量必须为public static final的原因
  2. 阿里云系列——7.阿里云IIS系列详解(过程+通用+最新)
  3. HIVE入门之数据模型
  4. python编程a的x次方_「Python 面试」第四次更新
  5. 隐藏esp_汽车一键启车主必须知道的几个“隐藏”技巧
  6. sdl2 opengl d3d9的mipmap和各项异性过滤渲染
  7. linux 给权限命令,Linux小白实用命令--权限设置
  8. matconvnet 尝试将 SCRIPT vl_imreadjpeg 作为函数执行:
  9. 宏杉科技高端存储再获认可 成功中标国家电网集采
  10. Vue动态加载并注册组件
  11. 快递电子面单打印接口对接demo-JAVA
  12. 2019腾讯校园招聘面经
  13. GymBase英文版主题-健身主题-WordPress响应式
  14. semi-suppervised learning 半监督学习
  15. 群晖NAS搭建web服务器,并发布公网可访问 2/4
  16. IT职场求生法则(3)- 部门经理及副总适用法则
  17. c语言十七:动态内存申请
  18. 使用微软DNS服务器解决Hotmail、微软账户登录页面无法访问的问题
  19. 海光国产CPU芯片和服务器,海光CPU芯片 一文看懂国产CPU!“造不如买”时代终
  20. 转 不管你学的是什么专业,你都应该多少懂些管理学的东西

热门文章

  1. STM32F103C8/BT6最小系统原理图、PCB
  2. OpenCV制作自己的线性滤镜
  3. 解决:vs2013 错误 1 error MSB8031: Building an MFC project for a non-Unicode character set is deprecated.
  4. C 多线程编程之在类中使用多线程(thread)的方法
  5. 【绝对靠谱】Vue生成二维码Qrcode,可插入二维码中心logo图标,可以设置二维码颜色大小等属性
  6. mediav聚效广告代码片段
  7. 什么是DCI? 它有什么用?
  8. Go 分布式学习利器(14)-- Go语言的错误处理
  9. 十大排序算法 导图总结
  10. 《挑战30天C++入门极限》新手入门:C/C++中枚举类型(enum)