caffe重新编译过程中的错误集锦
1、 \src\caffe\util\db_lmdb.cpp(13): error C3861: “mkdir”: 找不到标识符 …\src\caffe\util\db_lmdb.cpp(13): error C2512: “google::CheckOpString”: 没有合适的默认构造函数可用
答案:打开db_lmdb,加入宏:
#if defined(_MSC_VER)
#include <direct.h>
#define mkdir(X, Y) _mkdir(X)
2、data_transformer.cpp 1>…\src\caffe\common.cpp(36): error C3861: “getpid”: 找不到标识符 ===这种错误一般就是没有对应的函数或者对应的头文件
答案:旧版的vs添加#include "unistd.h"即可
(VS2013)新版的VS添加#include "process.h"
即可解决该问题
然后将getpid改为_getpid
**3、open、close问题vs2013编译caffe的io.cpp文件错误,open和close无法识别
答案:在io.cpp开头加入:
#ifndef _UNISTD_H
#define _UNISTD_H
#include <io.h>
#include <process.h>
#endif
4、 C2977:‘std :: tuple’:模板参数太多(MSVC11)
导师帮我找到了解决办法:
答案:将下边代码加入到文件的属性->c/c+±>预处理器->预处理器定义中
GTEST_USE_OWN_TR1_TUPLE=0
http://landcareweb.com/questions/9093/c2977-std-tuple-mo-ban-can-shu-tai-duo-msvc11
注意:刚开始自己把GTEST_USE_OWN_TR1_TUPLE=0在代码里给修改了,然后就导致了整个项目出现了问题,我还怀疑它把我的一些文件都删除了导致我的运行结果错误为7000+。所以不能在代码里修改!!!!
_VARIADIC_MAX = 10; - Gonen I 这个我也没有成功
以下可参考:
4、M_IP问题:
答案:_USE_MATH_DEFINES加入到文件的属性->c/c+±>预处理器->预处理器定义中
答案2:如图中一样加入下面三行(这是我们导师给我改代码时解决这个办法的方法,真是很佩服大佬,不用查就知道怎么改错!!!)
#ifndef M_PI
#define M_PI 3.1415926
#endif
5、error C2065: “SIGHUP”: 未声明的标识符
该命令问linux系统下的,windows没有定义,应进行以下更改
原代码
更改为:
case SIGBREAK:
got_sighup = true;
break;
6、error C2079: “sa”使用未定义 struct“`anonymousnamespace’::HookupHandler::sigaction
答案:
原代码:
更改为:
if (signal(SIGBREAK, handle_signal) == SIG_ERR) {
LOG(FATAL) << "Cannot install SIGBREAK handler.";
}
if (signal(SIGINT, handle_signal) == SIG_ERR) {
LOG(FATAL) << "Cannot install SIGINT handler.";
}
7、无法打开输入文件\lib\Release\caffe.lib
答案:产生这个原因是由于一个.sln文件里包括好几个项目文件,你的caffe没有编译成功,就编译其他项目了,所以解决办法就是一个一个的去编译。
8、intellisense的报错
答案:这个错误不用管!!!
9、无法打开包括文件
答案:这样子的错误需要在#include 写文件所在的相对路径
采纳链接
https://unordered.org/timelines/58b076ae87800000
https://blog.csdn.net/u012556077/article/details/50359416
https://blog.csdn.net/qq_31511955/article/details/80505884
http://landcareweb.com/questions/9093/c2977-std-tuple-mo-ban-can-shu-tai-duo-msvc11