Happynear Caffe + vs2015 + protobuf3.1 problem
Happynear Caffe + vs2015 + protobuf3.1
visual studio 版本问题:
MicrosoftCaffe supports only visual studio 2013
Caffe(HappyNear) supports visual studio 2015
我这里使用visual studio 2015
因为有个项目protobuf3.1冲突,重新编译HappyNear的Caffe + visual studio 2015 + protobuf3.1
关于如何编译caffe+vs2015, 建议参考Caffe+Visual Studio 2015编译可以有多简单?,我这里只记录自己碰到的其他问题。
原地址:https://github.com/happynear/caffe-windows
不使用cuda,项目libcaffe无法加载的问题
在commonSettings.props中设置不使用cuda之后,保存,重新启动vs2015,重新加载,多来两次,就能加载成功,否则会一直报错:没有cuda8.0blablabla…
我的配置如下,
<CpuOnlyBuild>true</CpuOnlyBuild>
<UseCuDNN>false</UseCuDNN>
<UseNCCL>false</UseNCCL>
<UseMKL>false</UseMKL>
<CudaVersion>8.0</CudaVersion>
<!-- NOTE: If Python support is enabled, PythonDir (below) needs to be
set to the root of your Python installation. If your Python installation
does not contain debug libraries, debug build will not work. -->
<PythonSupport>true</PythonSupport>
<!-- NOTE: If Matlab support is enabled, MatlabDir (below) needs to be
set to the root of your Matlab installation. -->
<MatlabSupport>false</MatlabSupport>
<MXNetSupport>true</MXNetSupport>
特别注意:这个
<CudaDependencies>cufft.lib</CudaDependencies>
要改成
<CudaDependencies></CudaDependencies>
否则
$(CudaDependencies)会报错找不到依赖cufft.lib
这两个可以开通,没有影响
<MatlabSupport>true</MatlabSupport>
<MXNetSupport>true</MXNetSupport>
但是,如果没有安装matlab, 就不要使用matlabsupport,否则会提示无法找到mex.h而通不过编译
特别注意,不使用cuda时:这个
<CudaDependencies>cufft.lib</CudaDependencies>
要改成
<CudaDependencies></CudaDependencies>
否则
$(CudaDependencies)会报错找不到依赖cufft.lib
无法打开文件“python36_d.lib”
2>------ 已启动生成: 项目: pycaffe, 配置: Debug x64 ------
2> PythonPreBuild.cmd : Create output directories for python scripts.
2> PythonPreBuild.cmd : Create dummy init.py file
2> PythonPreBuild.cmd : Generating src\caffe\proto\caffe.pb.h with python bindings
2>LINK : fatal error LNK1104: 无法打开文件“python36_d.lib”
解决办法:compile python3.6.5 on windows and copy this file to the relevant location,
自己编译一下python3.6.5,拷贝python36_d.lib到anaconda3目录下即可
e.g. D:\Anaconda3\libs\python36_d.lib
注意用visual studio 2015打开pcbuild.sln即可完成编译,我的路径是
E:\APython\Python-3.6.5\PCbuild
我是把debug和Release都自己编译了,可以灵活应用。如果不想编译,去找一下直接用编译好的binary应该也可以。
去掉将警告视为错误,否则诸多项目无法通过
所有的项目都要去掉这个设置,属性==>C/C++ > setting>将警告视为错误 ==> No
取决于你的需要,这些项目包括:
test.all
pycaffe.
caffe.binding
caffe.binding,这里还要改成dll动态库
另外caffe.binding,这里还要改成dll动态库,不要用exe应用程序(我的默认是exe,奇怪了),否则会提示找不到这个*.dll:
例如我的情况是:
E:\Caffehappynear\caffe-windows-ms\windows…\Build\x64\Debug\caffe.binding.dll
Protobuf3.1
因为我的Caffe要支持其他项目的protobuf3.1,出现protobuf冲突。所以我改成了protobuf3.1。
编译本机Protobuf3.10的位置
我的本机位置在
E:\general\protobuf-3.1.0\dev\protobuf.sln
编译完成后将相关文件拷贝到caffe-windows-ms/windows/third_party下面即可
HAVE_LONG_LONG
happynear默认使用protobuf3.0, 如果改成3.1 (for eco visual object tracking)
在type_traits.h中,下面的代码要注释掉,否则会报错
//#ifdef HAVE_LONG_LONG
//template<> struct is_integral<long long> : true_type { };
//template<> struct is_integral<unsigned long long> : true_type { };
//#endif
参考
https://github.com/protocolbuffers/protobuf/pull/2203
https://github.com/protocolbuffers/protobuf/issues/2202
Protobuf3.1静态编译
如果要编译静态库(一般情况下,应该使用静态库),就要去掉__declspec前缀,此时所有项目,都必须去掉PROTOBUF_USE_DLLS(这个是DLL必须的,参考readme.md from here)
也就是说,下面这些项目,
libprotobuf / libprotobuf-lite / libprotoc / protoc.exe
C\C++预编译选项中要去掉:PROTOBUF_USE_DLLS