Caffe 版本:https://github.com/Microsoft/caffe
前期Caffe安装及Release版编译步骤参考:
https://blog.csdn.net/AManFromEarth/article/details/80212554
https://blog.csdn.net/zh8706/article/details/94553421
下面要在VS2013下编译Debug版Caffe。
我们注意到在Release模式下编译Caffe,会在caffe-master所在的目录下创建NugetPackages目录,包含了编译Release版Caffe所需要的工具包,如下:
在VS2013中切换为Debug x64模式,编译libCaffe或者Caffe工程,会报"error MSB4062: 未能从程序集..."及"error : NuGet Error:未知命令:“overlay”的错误,如下:
在这里需要特别说明下,在Release模式下编译时可能也会出现这个错误,这个问题的原因是Caffe编译过程中VS的NuGet程序包管理工具会下载工程所需要的程序包文件,但有时候却下载不全,就出现这个错误。所以在Release模式下,如果都编译成功了,就表示所依赖的工具包是完整下载的,没有缺漏,所以最好备份一下整个NugetPackages文件夹。
但是即使我们在Release模式下编译成功,切换到Debug模式下依然还是会报以上错误的,原因就是NuGet无法下载Debug版本的工具包,这里所缺的工具包有两个:glog.0.3.3.0与OpenCV.2.4.11的Debug版本dll及lib文件
NugetPackages\glog.0.3.3.0\build\native\bin\x64\v120目录下缺Debug版本dll文件
NugetPackages\glog.0.3.3.0\build\native\lib\x64\v120目录下缺Debug版本lib文件
NugetPackages\OpenCV.2.4.11\build\native\bin\x64\v120目录下缺Debug版本dll文件
NugetPackages\OpenCV.2.4.11\build\native\lib\x64\v120目录下缺Debug版本lib文件
既然NuGet没法帮我们下载(源端估计也没有提供)Debug版本文件,那我们只能自己下载。
到这里https://github.com/google/glog/releases/tag/v0.3.3 下载glog0.3.3,下载后使用VS2013打开google-glog.sln文件,切换到Debug x64平台
对libglog右键--生成,会报以下错误:
这里有两个错误,一个是error C2039: “min”: 不是“std”的,解决方法是:在logging.cc中添加头文件,即加上 #include
还有一个错误是logging_fail函数中用到了汇编代码,但在x64模式下,VS是不支持汇编代码的。
在这里我们用最简单的解决方式,即将_asm int 3一行 注释掉即可,有兴趣的朋友也可以查查_asm int 3有什么作用。
然后再重新生成libglog,即生成成功。
将glog-0.3.3\x64\Debug下的dll文件拷贝到到NugetPackages\glog.0.3.3.0\build\native\bin\x64\v120\Debug\dynamic
将glog-0.3.3\x64\Debug下的lib文件拷贝到NugetPackages\glog.0.3.3.0\build\native\lib\x64\v120\Debug\dynamic
到这里https://opencv.org/releases/page/4/下载OpenCV2.4.11.exe,下载后双击运行解压,
将opencv\build\x64\vc12\bin目录下的*d.dll结尾的dll文件全部拷贝到NugetPackages\OpenCV.2.4.11\build\native\bin\x64\v120\Debug
将opencv\build\x64\vc12\lib目录下的*d.lib结尾的lib文件全部拷贝到NugetPackages\OpenCV.2.4.11\build\native\lib\x64\v120\Debug
至此Debug x64模式下Caffe所缺的文件已经齐全,再次编译libcaffe及caffe均可编译成功,如下:
下面我们以caffe中的mnist样例为例调试caffe。
在VS中将caffe设为启动项目,并右键——属性——调试,设置如下:
点击VS工具栏中的开始调试,但弹出了以下错误:
解决方法:
找到caffe-master\Build\x64\Debug目录下的libgflags-debug.dll文件,将其重命名为libgflags.dll即可。
再次调试,成功命中caffe入口main函数断点:
也出现了mnist训练的过程记录日志:
至此,caffe debug版本编译及调试完成。