用vs2017编译cocos2dx2.7以上版本常见报错的解决

今天刚装cocos引擎,准备跑起来,练练手结果因为vs是2017版本,结果本来在vs2012上能完美运行的cocos2dx代码,结果却翻了车,结果查了一下,得知是vs2017的一些库函数的配置改变了,就我这次遇到的几个比较容易遇到的问题总结一下

1.snprintf宏重定义:#error: Macro definition of snprintf conflicts
原因
在VS2017前,Windows系统头文件并没有定义snprintf宏,所以cocos2d在CCStdC-win32.h文件做了如下定义

#define snprintf _snprintf

而VS2015开始在系统头文件中又定义了snprintf宏,所以就出现了重定义冲突。

解决
在项目路径下的cocos2d\cocos\platform\win32\CCStdC-win32.h文件中注释以下这行,如下

//#define snprintf _snprintf

当然也有别的办法
同样是在cocos2d\cocos\platform\win32\CCStdC-win32.h文件下,删除以下代码

#if !defined(isnan)

#define isnan   _isnan

#endif 

#ifndef snprintf

#define snprintf _snprintf

#endif

2、错误:无法解析的外部符号 __imp___vsnprintf
原因
vs2015默认编译时将许多标准库采用内联方式处理,因而没有可以链接的标准库文件,所以要专门添加标准库文件来链接标准库中的函数。

在libcocos2d的属性页连接器选项的输入项,附加依赖库中加入legacy_stdio_definitions.lib
用vs2017编译cocos2dx2.7以上版本常见报错的解决_第1张图片
3、错误:libpng.lib(pngerror.obj) : error LNK2019: 无法解析的外部符号 __imp____iob_func
原因
当前的 libpng.lib 是旧版本编译的,而VS2015把 __iob_func 改成了 __acrt_iob_func,所以出现不一致错误,因此可在项目路径\cocos2d\cocos\physics这个文件中的任意一个cpp文件中增加了
以下两行代码

#pragma comment(lib,"legacy_stdio_definitions.lib")
extern "C" { FILE __iob_func[3] = { *stdin,*stdout,*stderr }; }

4、错误:error C2039: “back_inserter”: 不是“std”的成员
原因
VS2015以上需要对std标准库单独声明

解决
在出错的cpp文件头部加上这句

#include 

再次编译,libcocos2d库应该能编译成功了,如果之后生成cpp-tests工程时出现相同错误,则按上面方法照样修改。

你可能感兴趣的:(cocos2dx入坑记)