Chinaunix首页 | 论坛 | 博客
  • 博客访问: 96257
  • 博文数量: 41
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 486
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-18 20:09
文章分类

全部博文(41)

文章存档

2016年(1)

2015年(1)

2014年(9)

2013年(30)

我的朋友

分类: C/C++

2013-08-08 10:51:13

最近碰到以下问题:
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, 不方便。



 如果静态库包含其他库, 则调用这个静态库的工程需要包含其他库

阅读(1101) | 评论(0) | 转发(0) |
0

上一篇:单例的几种实现方式

下一篇:cegui

给主人留下些什么吧!~~