Cocos2d-x 3.10 sdk 升级至 Cocos2d-x sdk 3.17.1 simulator 编译问题汇总

原来在Cocos2d-x sdk 3.10编译simulator没有问题,以下问题均来自Cocos2d-x sdk 3.17.1

问题1:main函数修饰错误导致编译错误


1>------ 已启动生成: 项目: simulator, 配置: Debug Win32 ------
1>  main.cpp
1>main.cpp(29): error C2146: 语法错误: 缺少“;”(在标识符“wWinMain”的前面)
1>main.cpp(33): warning C4007: “wWinMain”: 必须是“__stdcall”
1>main.cpp(33): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
========== 生成: 成功 0 个,失败 1 个,最新 6 个,跳过 0 个 ==========

解决办法:

修改APIENTRY修饰符为:__stdcall或WINAPI,修改后能够正常编译。

问题2(续问题1):未加载对应静态库


1>    正在创建库 D:\Cocos2d\cocos2d-x-3.17.1\tools\simulator\frameworks\runtime-src\proj.win32\Debug.win32\simulator.lib 和对象 D:\Cocos2d\cocos2d-x-3.17.1\tools\simulator\frameworks\runtime-src\proj.win32\Debug.win32\simulator.exp
1>libsimulator.lib(CCHTTPRequest.obj) : error LNK2019: 无法解析的外部符号 __imp__curl_formadd,该符号在函数 "public: void __thiscall cocos2d::extra::HTTPRequest::addFormFile(char const *,char const *,char const *)" (?addFormFile@HTTPRequest@extra@cocos2d@@QAEXPBD00@Z) 中被引用
1>libsimulator.lib(CCHTTPRequest.obj) : error LNK2019: 无法解析的外部符号 __imp__curl_formfree,该符号在函数 "private: void __thiscall cocos2d::extra::HTTPRequest::onRequest(void)" (?onRequest@HTTPRequest@extra@cocos2d@@AAEXXZ) 中被引用
1>libsimulator.lib(CCHTTPRequest.obj) : error LNK2019: 无法解析的外部符号 __imp__curl_easy_escape,该符号在函数 "private: void __thiscall cocos2d::extra::HTTPRequest::onRequest(void)" (?onRequest@HTTPRequest@extra@cocos2d@@AAEXXZ) 中被引用
1>libsimulator.lib(CCHTTPRequest.obj) : error LNK2019: 无法解析的外部符号 __imp__curl_free,该符号在函数 "private: void __thiscall cocos2d::extra::HTTPRequest::onRequest(void)" (?onRequest@HTTPRequest@extra@cocos2d@@AAEXXZ) 中被引用
1>libsimulator.lib(CCHTTPRequest.obj) : error LNK2019: 无法解析的外部符号 __imp__curl_slist_append,该符号在函数 "private: void __thiscall cocos2d::extra::HTTPRequest::onRequest(void)" (?onRequest@HTTPRequest@extra@cocos2d@@AAEXXZ) 中被引用
1>libsimulator.lib(CCHTTPRequest.obj) : error LNK2019: 无法解析的外部符号 __imp__curl_slist_free_all,该符号在函数 "private: void __thiscall cocos2d::extra::HTTPRequest::onRequest(void)" (?onRequest@HTTPRequest@extra@cocos2d@@AAEXXZ) 中被引用
1>libsimulator.lib(CCHTTPRequest.obj) : error LNK2019: 无法解析的外部符号 __imp__curl_easy_strerror,该符号在函数 "private: void __thiscall cocos2d::extra::HTTPRequest::onRequest(void)" (?onRequest@HTTPRequest@extra@cocos2d@@AAEXXZ) 中被引用
1>libsimulator.lib(CCHTTPRequest.obj) : error LNK2019: 无法解析的外部符号 __imp__curl_easy_init,该符号在函数 "private: bool __thiscall cocos2d::extra::HTTPRequest::initWithUrl(char const *,int)" (?initWithUrl@HTTPRequest@extra@cocos2d@@AAE_NPBDH@Z) 中被引用
1>libsimulator.lib(CCHTTPRequest.obj) : error LNK2019: 无法解析的外部符号 __imp__curl_easy_setopt,该符号在函数 "public: void __thiscall cocos2d::extra::HTTPRequest::setRequestUrl(char const *)" (?setRequestUrl@HTTPRequest@extra@cocos2d@@QAEXPBD@Z) 中被引用
1>libsimulator.lib(CCHTTPRequest.obj) : error LNK2019: 无法解析的外部符号 __imp__curl_easy_perform,该符号在函数 "private: void __thiscall cocos2d::extra::HTTPRequest::onRequest(void)" (?onRequest@HTTPRequest@extra@cocos2d@@AAEXXZ) 中被引用
1>libsimulator.lib(CCHTTPRequest.obj) : error LNK2019: 无法解析的外部符号 __imp__curl_easy_cleanup,该符号在函数 "private: void __thiscall cocos2d::extra::HTTPRequest::cleanup(void)" (?cleanup@HTTPRequest@extra@cocos2d@@AAEXXZ) 中被引用
1>libsimulator.lib(CCHTTPRequest.obj) : error LNK2019: 无法解析的外部符号 __imp__curl_easy_getinfo,该符号在函数 "private: void __thiscall cocos2d::extra::HTTPRequest::onRequest(void)" (?onRequest@HTTPRequest@extra@cocos2d@@AAEXXZ) 中被引用
1>D:\Cocos2d\cocos2d-x-3.17.1\tools\simulator\frameworks\runtime-src\proj.win32\../../../runtime/win32/simulator.exe : fatal error LNK1120: 12 个无法解析的外部命令
========== 生成: 成功 0 个,失败 1 个,最新 6 个,跳过 0 个 ==========

症结分析:这显然是相关静态库未加载导致,对应的静态库应该是curl,文件名为libcurl.lib。

解决办法:

在stdafx.h中添加,静态库加载语句,编译通过。

#pragma comment(lib,"libcurl.lib")

问题3:生成后事件复制文件失败


1>  simulator.vcxproj -> D:\Cocos2d\cocos2d-x-3.17.1\tools\simulator\frameworks\runtime-src\proj.win32\../../../runtime/win32/simulator.pdb (Full PDB)
1>  复制了 17 个文件
1>  找不到文件 - *.exe
1>  复制了 0 个文件
1>  找不到文件 - lang
1>  复制了 0 个文件
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(133,5): error MSB3073: 命令“if not exist "D:\Cocos2d\cocos2d-x-3.17.1\tools\simulator\frameworks\runtime-src\proj.win32\..\..\..\runtime" mkdir "D:\Cocos2d\cocos2d-x-3.17.1\tools\simulator\frameworks\runtime-src\proj.win32\..\..\..\runtime"
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(133,5): error MSB3073:
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(133,5): error MSB3073: if not exist "D:\Cocos2d\cocos2d-x-3.17.1\tools\simulator\frameworks\runtime-src\proj.win32\..\..\..\runtime\win32" mkdir "D:\Cocos2d\cocos2d-x-3.17.1\tools\simulator\frameworks\runtime-src\proj.win32\..\..\..\runtime\win32"
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(133,5): error MSB3073:
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(133,5): error MSB3073: xcopy /Y /Q "D:\Cocos2d\cocos2d-x-3.17.1\tools\simulator\frameworks\runtime-src\proj.win32\Debug.win32\*.dll" "D:\Cocos2d\cocos2d-x-3.17.1\tools\simulator\frameworks\runtime-src\proj.win32\..\..\..\runtime\win32"
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(133,5): error MSB3073: xcopy /Y /Q "D:\Cocos2d\cocos2d-x-3.17.1\tools\simulator\frameworks\runtime-src\proj.win32\Debug.win32\*.exe" "D:\Cocos2d\cocos2d-x-3.17.1\tools\simulator\frameworks\runtime-src\proj.win32\..\..\..\runtime\win32"
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(133,5): error MSB3073: xcopy /Y /Q "D:\Cocos2d\cocos2d-x-3.17.1\tools\simulator\frameworks\runtime-src\proj.win32\Debug.win32\lang" "D:\Cocos2d\cocos2d-x-3.17.1\tools\simulator\frameworks\runtime-src\proj.win32\..\..\..\runtime\win32"
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(133,5): error MSB3073:
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(133,5): error MSB3073: :VCEnd”已退出,代码为 4。
========== 生成: 成功 0 个,失败 1 个,最新 6 个,跳过 0 个 ==========
XCOPY命令失败​​​​​

 症结分析:生成后事件在复制某些文件时,文件或文件夹不存在导致失败。此处是Debug.win32/lang与Debug.win32/*.exe不存在,因此会提示复制失败。

解决办法:

删除生成后事件的以下内容:

xcopy /Y /Q "$(OutDir)*.exe" "$(ProjectDir)..\..\..\runtime\win32"
xcopy /Y /Q "$(OutDir)lang" "$(ProjectDir)..\..\..\runtime\win32"

最终可以编译通过:

后记:

至于需要使用语言包的朋友,可以直接引用3.10版本相关内容

具体操作步骤如下:

1.将cocos2d-x-3.10\tools\simulator\frameworks\runtime-src\Classes\ide-support拷贝到对应新引擎(3.17.1)文件夹中,这里已经包含语言文件lang

2.将相关代码加入到simulator的工程,由于此处只是使用lua,所以只加lua到里面去(编译js的问题暂时跳过,有兴趣可以自己解决一下,然后告诉我,给我留言)

3.将cocos2d-x-3.10\tools\simulator\frameworks\runtime-src\Classes\AppDelegate.cpp文件内容拷贝到新引擎对应的文件里去,并屏蔽js相关代码(网上其他朋友是做了该步骤,我的机器上并没有做如下处理,也正常运行,发现新的解决方法也请留言给我)

到第二步骤为止已经正常编译。

PS: 3.10的模拟器编译成功,在windows下运行是中文版的菜单,而3.17.1的版本是英文版的,这是因为语言包的问题。

发布了105 篇原创文章 · 获赞 35 · 访问量 31万+

猜你喜欢

转载自blog.csdn.net/mimica/article/details/89056360