caffe从Ubuntu系统下转化到windows系统下手动调bug全纪录

近来,闲来无事,便想着将caffe从从Ubuntu系统下转化到windows系统下玩一玩,期间碰到了一些bug,先记录如下:
1、error C3861: “mkdir”: 找不到标识符
解决办法如下
这里写图片描述
2、
解决办法如下
这里写图片描述
3、error C3861: “getpid”: 找不到标识符
解决办法如下:
这里写图片描述
4、error C3861: “open”,“close”: 找不到标识符
解决办法如下
//int fd = open(filename, O_RDONLY);linux
修改为
int fd = _open(filename, O_RDONLY);
//close(fd); // linux
修改为
_close(fd);
5、error C2065: “SIGHUP”: 未声明的标识符
该命令问linux系统下的,windows没有定义,应改为

ifdef _MSC_VER

case SIGBREAK:
    got_sighup = true;
    break;

else

case SIGHUP:   // SIGHUP 为linux系统
  got_sighup = true;
  break;

endif

6、error C2079: “sa”使用未定义的 struct“`anonymous-namespace’::HookupHandler::sigaction”
同样也是系统不一样导致
改为

ifdef _MSC_VER // 在编译器下已经定义好的

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.";
}

else

struct sigaction sa;
// Setup the handler
sa.sa_handler = &handle_signal;
// Restart the system call, if at all possible
sa.sa_flags = SA_RESTART;
// Block every signal during the handler
sigfillset(&sa.sa_mask);
// Intercept SIGHUP and SIGINT
if (sigaction(SIGHUP, &sa, NULL) == -1) {
  LOG(FATAL) << "Cannot install SIGHUP handler.";
}
if (sigaction(SIGINT, &sa, NULL) == -1) {
  LOG(FATAL) << "Cannot install SIGINT handler.";
}

endif

7、error LNK2001: 无法解析的外部符号 “_declspec(dllimport) void __cdecl google::InstallFailureSignalHandler(void)” (__imp?InstallFailureSignalHandler@google@@YAXXZ)
InstallFailureSignalHandler为Linux系统下的
应将common.cpp文件中的对应地方注释,或者将其改为ifdefine

if !defined( _MSC_VER)

::google::InstallFailureSignalHandler();

endif // _MSC_VER

8、 error C4703: 使用了可能未初始化的本地指针变量“stream”
由于2012以后版本出现了安全安全开发生命周期(SDL)检查,也就是在编译的时候,当SDL检查启用时,编译器会严格检测缓冲区的溢出,并且会在delete某个指针时,自动为这个指针定义一个非有效的值,防止在delete以后仍用到这个指针时出错。还有就是会在你定义一个对象时,自动为这个对象赋值零。从这些功能来看,有些功能还是不错的,不但方便了程序员使用也增强了程序的健壮性,但是对老版本程序的兼容就会出现问题,以前程序中编译通过的内容也许在VS2012中就没有办法通过。
解决方法:有一个选择打开和关闭SDL检查的位置就是:项目属性->配置属性->C/C++->常规->SDL检查,选测是或者否。此时我们选择”否”,则上面的那个错误就不会出现了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值