主要看这篇文章,有点小瑕疵,瑕不掩瑜。参考链接:http://www.bubuko.com/infodetail-902302.html

文中红色标记为文章小瑕疵的地方,在此文中标记出来,做为修改对上一文的补充。

参考原文链接:http://blog.csdn.net/joshua_1988/article/details/45048871

         2014年4月的时候自己在公司就将Caffe移植到Windows系统了,今年自己换了台电脑,想在家里也随便跑跑,本来也装了Ubuntu可以很方便的配置好,无奈在家的风格是“娱乐的时候抽空学习”,所以移植到Windows还是很有必要的。但是,公司禁止将公司内部资料带出,很多地方又都忘记了,周末磨了一天终于移植完,本篇为记录将Caffe移植至Windows7 x64系统下的一些关键步骤。下面介绍如何从源码建立VS2013工程。

1.  从  https://github.com/BVLC/caffe  下载caffe源码,master或者dev版本都可以,本文中以dev为例

2.  新建一个空的控制台VS2013工程,起名为caffe-dev。

File --> New --> Project

选择Win32 Console Application

选择工程路径,比如D:\CODE\CXX

给项目命名caffe-dev

单击OK后选择Empty project

3.  将工程的Solution Platform改为x64

Build --> Configuration Manager --> Active solution platform --> new --> x64 --> OK

4.  设置CUDA编译

property--> Build dependencies --> Build Customizations... --> CUDA 6.5 --> OK

5.  设置一些工程下的路径,注意Debug和Release下都要设置

在Project --> Properties --> Configuration Properties --> VC++ Directories --> Include Directories中添加openblas、opencv、boost和cuda,例如

C:\Tools\boost_1_57\include;

C:\Tools\OpenBLAS_MinGW\include;

C:\Tools\opencv\build\include;

C:\Tools\opencv\build\include\opencv;

C:\Tools\opencv\build\include\opencv2;

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\include;

在Project --> Properties --> Configuration Properties --> VC++ Directories --> Library Directories中添加openblas、opencv、boost和cuda,例如

C:\Tools\OpenBLAS_MinGW\lib;

C:\Tools\opencv\build\x64\vc12\lib;

C:\Tools\boost_1_56\lib64-msvc-12.0;

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5\lib\x64;

6. 将压缩包内的include、src和tools文件夹拷贝到工程根目录下,同时把整理好的3rdparty文件夹也拷贝到工程目录下

7.  添加caffe的路径和3rdparty中第三方依赖库的路径,同样Debug和Release都要设置

在Project --> Properties --> Configuration Properties --> C/C++ --> General --> Additional Include Directories中添加

../include;../src

../3rdparty/include

../3rdparty/include/hdf5

../3rdparty/include/lmdb

C:\Tools\Caffe-3rd\include;

在Project --> Properties --> Configuration Properties --> Linker --> General --> Additional Library Directories中添加

../3rdparty/lib

C:\Tools\Caffe-3rd\lib\LevelDB;

C:\Tools\Caffe-3rd\lib\lmdb;

C:\Tools\Caffe-3rd\lib\openblas;

C:\Tools\Caffe-3rd\lib\protobuf;

C:\Tools\Caffe-3rd\lib\snappy;

在Project --> Properties --> Configuration Properties --> Linker --> Input --> Additional Dependencies中添加

opencv_core2410.lib

opencv_highgui2410.lib

opencv_imgproc2410.lib

opencv_ts300.lib

opencv_world300.lib

cudart.lib

cublas.lib

curand.lib

gflags.lib

libglog.lib

libopenblas.dll.a

libopenblas.lib

libprotobuf.lib

libprotoc.lib

leveldb.lib

lmdb.lib

libhdf5.lib

libhdf5_hl.lib

Shlwapi.lib

注意在Debug下应添加xxxd.lib形式的自己确认一下debug命名 静态库

opencv_core2410d.lib

opencv_highgui2410d.lib

opencv_imgproc2410d.lib

opencv_ts300d.lib

opencv_world300d.lib

cudart.lib

cublas.lib

curand.lib

gflagsd.lib

libglogd.lib

libopenblas.dll.a

libopenblas.lib

libprotobuf-gd.lib

libprotoc.lib

leveldbd.lib

lmdbd.lib

libhdf5.lib

libhdf5_hl.lib

Shlwapi.lib

8. 利用protoc.exe和caffe.proto生成caffe.pb.h和caffe.pb.cc文件

在编译protobuf的时候会生成一个可执行文件protoc.exe,在工程的D:\CODE\CXX\caffe-dev\src\caffe\proto路径下有一个文件叫caffe.proto,可以将protoc.exe拷贝到该路径下,在命令行中进入D:\CODE\CXX\caffe-dev\src\caffe\proto路径,输入命令

编译blob.cpp

直接编译时会报错,缺少文件”caffe\proto\caffe.pb.h”

这个时候需要将proto.exe放到../3rdparty/bin文件夹

将 GernaratePB.bat 放在../scripts文件夹,点击运行,可以生成文件

可以看到在该路径下会生成caffe.pb.h和caffe.pb.cc,在D:\CODE\CXX\caffe\include\caffe中新建一个文件夹proto,

将生成的两个文件移动到D:\CODE\CXX\caffe\include\caffe\proto中

<del>cd C:\Tools\caffe-master\src\caffe\proto
protoc --cpp_out="." caffe.proto</del>

9. 准备mkstemp.h和mkstemp.cpp文件。

将mkstemp.h放在include/caffe/util/路径下,mkstemp.h中的内容为

 #include <windows.h>  #include <io.h>  int mkstemp(char *templates);  

将mkstemp.cpp放在src/caffe/util/路径下,mkstemp.cpp中的内容为

/* mkstemp extracted from libc/sysdeps/posix/tempname.c.  Copyright (C) 1991-1999, 2000, 2001, 2006 Free Software Foundation, Inc. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.  */  #include "caffe/util/mkstemp.hpp"  #include <errno.h>  #include <fcntl.h>  #include <sys/stat.h>  static const char letters[] =  "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";  /* Generate a temporary file name based on TMPL.  TMPL must match the rules for mk[s]temp (i.e. end in "XXXXXX").  The name constructed does not exist at the time of the call to mkstemp.  TMPL is overwritten with the result.  */  int mkstemp (char *tmpl)  {  int len;  char *XXXXXX;  static unsigned long long value;  unsigned long long random_time_bits;  unsigned int count;  int fd = -1;  int save_errno = errno;  /* A lower bound on the number of temporary files to attempt to generate.  The maximum total number of temporary file names that can exist for a given template is 62**6.  It should never be necessary to try all these combinations.  Instead if a reasonable number of names is tried (we define reasonable as 62**3) fail to give the system administrator the chance to remove the problems.  */  #define ATTEMPTS_MIN (62 * 62 * 62)  /* The number of times to attempt to generate a temporary file.  To conform to POSIX, this must be no smaller than TMP_MAX.  */  #if ATTEMPTS_MIN < TMP_MAX  unsigned int attempts = TMP_MAX;  #else  unsigned int attempts = ATTEMPTS_MIN;  #endif  len = strlen (tmpl);  if (len < 6 || strcmp (&tmpl[len - 6], "XXXXXX"))  {  errno = EINVAL;  return -1;  }  /* This is where the Xs start.  */  XXXXXX = &tmpl[len - 6];  /* Get some more or less random data.  */  {  SYSTEMTIME      stNow;  FILETIME ftNow;  // get system time  GetSystemTime(&stNow);  stNow.wMilliseconds = 500;  if (!SystemTimeToFileTime(&stNow, &ftNow))  {  errno = -1;  return -1;  }  random_time_bits = (((unsigned long long)ftNow.dwHighDateTime << 32)  | (unsigned long long)ftNow.dwLowDateTime);  }  value += random_time_bits ^ (unsigned long long)GetCurrentThreadId ();  for (count = 0; count < attempts; value += 7777, ++count)  {  unsigned long long v = value;  /* Fill in the random bits.  */  XXXXXX[0] = letters[v % 62];  v /= 62;  XXXXXX[1] = letters[v % 62];  v /= 62;  XXXXXX[2] = letters[v % 62];  v /= 62;  XXXXXX[3] = letters[v % 62];  v /= 62;  XXXXXX[4] = letters[v % 62];  v /= 62;  XXXXXX[5] = letters[v % 62];  fd = open (tmpl, O_RDWR | O_CREAT | O_EXCL, _S_IREAD | _S_IWRITE);  if (fd >= 0)  {  errno = save_errno;  return fd;  }  else if (errno != EEXIST)  return -1;  }  /* We got out of the loop because we ran out of combinations to try.  */  errno = EEXIST;  return -1;  }  

10. 将caffe的源文件添加到工程中

将D:\CODE\CXX\caffe-dev\src\caffe路径下除了test文件中的所有源文件添加到工程中,如果想要跑一些测试代码,也可以把test中的源文件加进去

将D:\CODE\CXX\caffe-dev\include\caffe\proto下的caffe.pb.cc添加到工程中

将D:\CODE\CXX\caffe-dev\tools下的caffe.cpp添加到工程中

11. 修改一些代码

在include/caffe/common.hpp中添加#include <direct.h>

在include/caffe/util/io.hpp中添加#include "mkstemp.hpp",并将close函数替换为_close

char* mkdtemp_result = mkdtemp(temp_dirname_cstr);替换为errno_t mkdtemp_result = _mktemp_s(temp_dirname_cstr, sizeof(temp_dirname_cstr)); 

将bnll_layer.cu中的const float kBNLL_THRESHOLD = 50.;修改为#define kBNLL_THRESHOLD 50.

将util/db.cpp中的mkdir(source.c_str(), 0744)修改为_mkdir(source.c_str())

将util/io.cpp中的open函数替换为_openclose函数替换为_close

将util/io.cpp中ReadProtoFromBinaryFile函数中的int fd = open(filename, O_RDONLY);替换为int fd = open(filename, O_RDONLY | O_BINARY);

在util/math_functions.cpp中添加

#define __builtin_popcount __popcnt
#define __builtin_popcountl __popcnt  

在common.cpp中添加#include <process.h>

pid = getpid();替换为pid = _getpid(); (这里本来有个笔误,谢谢dongb5lz的提醒)

注释掉::google::InstallFailureSignalHandler();

将solver.cpp中的snprintf函数替换为sprintf_s


编译吧!!!!

.....................

按照文章http://www.bubuko.com/infodetail-902302.html里面的顺序编译.....,排错逐个排除....

VS2013(Win10X64)-配置编译Caffe相关推荐

  1. 一步一步指引你在Windows7上配置编译使用Caffe(https://github.com/fengbingchun/Caffe_Test)

    之前写过几篇关于Caffe源码在Windows764位上配置编译及使用过程,只是没有把整个工程放到网上,最近把整个工程整理清理了下,把它放到了GitHub上.下面对这个工程的使用作几点说明: 1.   ...

  2. caffe学习(一):开发环境搭建,编译caffe(win10)

    搭建caffe的开发环境可以说是很折磨人的一件事,经常会碰到这种那种的错误,前前后后折腾几天才能搞定. 我在自己的电脑上搭建caffe的环境前后花了2天,中间也碰到了挺多问题.不过网上也有挺多相关的博 ...

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

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

  4. Windows7上使用VS2013编译Caffe源码(不带GPU支持)步骤

    1.      从https://github.com/BVLC/caffe/通过git clone下载caffe源码,master分支,版本号为09868ac:$ git  clone https: ...

  5. windows7+visual studio 2013+CUDA7.5 编译caffe+配置matcaffe+配置pycaffe

    经过朋友指导,终于成功在windows7上成功编译了caffe,这里将编译过程记录 安装文件准备 1 visual studio 2013安装包下载 2 CUDA75 optional 3 windo ...

  6. VS2013配置编译Caffe-Win10_X64

    原文链接:http://blog.csdn.net/joshua_1988/article/details/45036993 有少量修改................ 2014年4月的时候自己在公司 ...

  7. Ubuntu 14.04 64位机上不带CUDA支持的Caffe配置编译操作过程

    Caffe是一个高效的深度学习框架.它既可以在CPU上执行也可以在GPU上执行. 下面介绍在Ubuntu上不带CUDA的Caffe配置编译过程: 1.      安装BLAS:$ sudo apt-g ...

  8. Ubuntu 14.04 LTS, 64bit, cuda 7, Caffe环境配置编译和安装

    1 GPU设备 1.1 本人使用的GPU设备 名称: 七彩虹GTX980Ti显卡iGame980Ti烈焰战神X 6G 1.2 硬件问题 Laboratory Tested Hardware: Berk ...

  9. ubuntu14.04下安装cudnn5.1.3,opencv3.0,编译caffe及配置matlab和python接口过程记录

    已有条件: ubuntu14.04+cuda7.5+anaconda2(即python2.7)+matlabR2014a 上述已经装好了,开始搭建caffe环境. 1. 装cudnn5.1.3,参照: ...

最新文章

  1. 设计模式 分析模式 华容道 中文分词算法......
  2. js中字符串转换为数字
  3. mysql常用查询命令
  4. 使用七牛云和PicGo搭建图床
  5. 无闪烁刷新页面 php,AJAX_Ajax实现无闪烁定时刷新页面实例代码,在Web开发中我们经常需要实现 - phpStudy...
  6. CF758 D. Ability To Convert 细节处理字符串
  7. php能做什么程序,PHP 能做什么?
  8. 阶段1 语言基础+高级_1-3-Java语言高级_09-基础加强_第2节 反射_6_反射_获取字节码Class对象的三种方式...
  9. floyd算法MATLAB实现
  10. xshell修改linux编码,xshell更改字符编码,xshell系统设置中文乱码怎么解决
  11. 服务器证书类型有哪些
  12. 基于卡方分布的独立性检验
  13. 2021年中国印染布产量及进出口情况分析:合成长丝织物产品出口数量最多[图]
  14. Peewee的基本使用
  15. 转载:Primo Ramdisk配置教程
  16. 论如何科学的看小本子
  17. 万字拿下leetcode线性数据结构
  18. 华为鸿蒙公测尝鲜,华为鸿蒙尝鲜测试正式开始,分三种形式
  19. 理解数字信号处理的三把钥匙
  20. 如何设置网件gs108e_【美国网件 GS108E 交换机开箱总结】插头|接口|散热孔|指示灯_摘要频道_什么值得买...

热门文章

  1. RxSwift之路 1#Swift语法知识准备
  2. mysql读写分离实战准备一
  3. REDIS一致性检查
  4. 微型php框架 include/mysql.class.php
  5. iPhone屏幕做一个最上层全屏幕的layer
  6. 给 OpenPOP.Net 加一个小功能,可用于收取邮件时监测数据流量!
  7. dede标签用法(来源网页)
  8. 信息安全-5:RSA算法详解(已编程实现)[原创]
  9. [CSS] Use CSS Counters to Create Pure CSS Dynamic Lists
  10. Jboss4集群配置【转】