最近碰到以下问题:
1>libcocos2d.lib(libcocos2d.dll) : error LNK2005: "public: class cocos2d::CCScene * __thiscall cocos2d::CCDirector::getRunningScene(void)" () 已经在 inc.Framework.obj 中定义
1>libcocos2d.lib(libcocos2d.dll) : error LNK2005: "public: void __thiscall cocos2d::CCDirector::setDisplayStats(bool)" () 已经在 inc.Framework.obj 中定义
1>libcocos2d.lib(libcocos2d.dll) : error LNK2005: "public: class cocos2d::CCScriptEngineProtocol * __thiscall cocos2d::CCScriptEngineManager::getScriptEngine(void)" () 已经在 inc.Framework.obj 中定义
1> 正在创建库 E:\phoneDev\projects\TangGames\DDZ4\proj.win32\Debug\DDZ4.lib 和对象 E:\phoneDev\projects\TangGames\DDZ4\proj.win32\Debug\DDZ4.exp
1>E:\phoneDev\projects\TangGames\DDZ4\proj.win32\Debug\DDZ4.exe : fatal error LNK1169: 找到一个或多个多重定义的符号
背景是调用cocos2dx库, 很奇怪, 按道理不会有重定义的错误。找了很久,发现预处理器中:
WIN32
_DEBUG
_WINDOWS
_CRT_SECURE_NO_WARNINGS
IGNORE_EXPORT
GLEW_STATIC
PTW32_STATIC_LIB
CURL_STATICLIB
LIBXML_STATIC
COCOS2D_DEBUG=1
CC_DLL=
把CC_DLL=去掉就可以了。
一头一尾是自己后来加的。
#if !defined(CC_DLL)
#if defined(_USRDLL)
#define CC_DLL __declspec(dllexport)
#else /* use a DLL library */
#define CC_DLL __declspec(dllimport)
#endif
#endif
之前项目把所有cocos2d相关的库都重新编译成静态库了,所以做了很多修改, 包括预处理定义。我现在用原始的cocos2x库,即dll方式,预处理中的定义会导致以上错误。
把所有预处理命令都删掉就可以了。
----总结:不必要的东西就删除。保持cocos2dx的const特性, 不随便去修改,以后升级起来也方便。而且lib方式的话,只是obj的打包,如果Lib包含dll, 在exe中还要导入dll, 不方便。
如果静态库包含其他库, 则调用这个静态库的工程需要包含其他库
阅读(1130) | 评论(0) | 转发(0) |