使用VS2015编译cocos2d-x-3.6引擎的cpp-tests工程,首先报错的是libcocos2d模块,错误如下:
1、错误:snprintf宏重定义:#error: Macro definition of snprintf conflicts
原因
在VS2015前,Windows系统头文件并没有定义snprintf宏,所以cocos2d在CCStdC-win32.h文件做了如下定义
#define snprintf _snprintf
而VS2015开始在系统头文件中又定义了snprintf宏,所以就出现了重定义冲突。
解决
在cocos2d的CCStdC-win32.h文件中注释以下这行,如下:
//#define snprintf _snprintf
继续编译,报错:
2、错误:无法解析的外部符号 __imp___vsnprintf
原因
vs2015默认编译时将许多标准库采用内联方式处理,因而没有可以链接的标准库文件,所以要专门添加标准库文件来链接标准库中的函数。
解决
在vs2015工程选项,链接器附加依赖项里面添加 legacy_stdio_definitions.lib 即可,如下图所示:
继续编译,报错:
3、错误:libpng.lib(pngerror.obj) : error LNK2019: 无法解析的外部符号 __imp____iob_func
原因
当前的 libpng.lib 是旧版本编译的,而VS2015把 __iob_func 改成了 __acrt_iob_func,所以出现不一致错误,因此可在工程任意一个cpp文件中增加了一个名为 __iob_func 的转换函数,代码如下:
/*
* 如果lib是用vs2015编译的,则不需要此定义
*/
#if _MSC_VER>=1900
#include "stdio.h"
_ACRTIMP_ALT FILE* __cdecl __acrt_iob_func(unsigned);
#ifdef __cplusplus
extern "C"
#endif
FILE* __cdecl __iob_func(unsigned i) {
return __acrt_iob_func(i);
}
#endif /* _MSC_VER>=1900 */
继续编译,报错:
4、错误:error C2039: “back_inserter”: 不是“std”的成员
原因
VS2015需要对std标准库单独声明
解决
在出错的cpp文件头部加上这句
#include
再次编译,libcocos2d库应该能编译成功了,如果之后生成cpp-tests工程时出现相同错误,则按上面方法照样修改。