1、error:C4996
搭建的kylin工程Release编译没有问题,但是修改为debug的时候,发现编译报错。
- 解决方案:在 属性=>C/C++ =>预处理器=>预处理器定义中添加下面这个就可以编译通过了。
_SCL_SECURE_NO_WARNINGS
又看了一下项目中的配置,在预处理器定义中还有下列配置:
_CRT_SECURE_NO_WARNINGS、_USEDLL、PA_FAST、PROJECT_KYLIN、GAME_SERVER;不知道干嘛用的,先记录下,回头研究。
2、包含了mysql.h以后,my_socket报错未定义
其实是找不到SOCKET,在#include<mysql.h>之前添加好#include<WinSock2.h>就好了。
3、error C2065: “NULL”: 未声明的标识符
包含#include <stdio.h>即可
4、C1189:#error:“No Target Architecture”。
第一次(KNetManager报错):是因为包含了 #include <processthreadsapi.h>,去掉即可。
第二次(KLogManager报错): #include <processnv.h> ... 行1
#include <wincon.h> ... 行2
#include <windows.h> ... 行3
注释第3行,打开1、2行,就会报错C1189。
注释第1、2行,打开第3行,报错解决。
5、未定义标志符SOCKET
最近在写一点网络的代码,原先的代码可以编译通过,后面修改了一下代码,搬移了一个工程。发现编译不过了。且报错有点诡异,提示“未定义标志符SOCKET”。
既然报错没有定义,那么就去相关定义的头文件里看一看,咋回事。
这里一共有两个定义的头文件,<winsock.h>和<WinSock2.h>。跳转进去以后,发现代码确实都是浅灰色(浅灰色代码不参与编译,SOCKET确实相当于未定义)
往上拖一拖,看下从哪里开始,代码变浅灰色了。
再看宏 WINAPI_FAMILY_PARRTITION 做了啥事情?
这就明白了,这里需要的是 WINAPI_PARITION_DESKTOP。再看下我搬移代码的新工程属性配置:
啥也不说了,再直接新建了个工程,配置为WINAPI_PARITION_DESKTOP,然后将代码搬移到新工程中。
6、C2375,accept:重定义,不同的连接
报错一共有59个,是因为库冲突了。
#include<windows.h>和#include<WinSock2.h>,对于accept()函数都有自己的定义实现。
修正方法是:把导致编译出错的两个文件互换了一下顺序就好了。
原先是:
#include "base/ev_thread.h"
#include "driver_redis.h"
改成
#include "driver_redis.h"
#include "base/ev_thread.h"
7.LINK2005,函数未定义。
工程中要使用hiredis.lib,但是hiredis对windows的支持不太友好。后来找了别人写的win32_interop,可以支持redis在windows中调用异步命令。但是一直编译不过,是因为工程是C++模式,但是源码是.c文件,所以要使用extern “C”{}。