今天在 Q 群有个群友问:做一个 Cocos2d 的项目在打包安卓的时候出错了,出现了这么一个情况,error: variable ‘dll_port CPackgeMgr’ has initializer but incomplete type class dll_port CPackgeMgr

后来他看代码发现,代码处是这么写的:

他不知道是什么意思,问如何解决。


我看到这个问题,回想到我之前做一个项目的时候,需要把一个纯 Mac 上的 Cocos2d 的项目移植到 Windows 上做开发。因为一些 Cocos2d 的库被修改过编译的时候出现 DLL 引用的问题,所以特意了解了下这方面的问题。这次这个群友出现了这个问题,虽然不是相同的问题,但是问题的根本原因是一致的,都是 DLL 声明编译的问题。我给他指出了把上面的代码做如下更改:

#ifdef WIN32
    #define dll_port  __declspec(dllexport)
#else //这个地方做更改
    #define dll_port
#endif

他修改后回复说,编译通过,的确是这个问题导致的。

后来我们讨论说,看这个项目的写法,应该之前的项目是纯 Win32 的项目,为了在 Windows 的编译这么写,但是没有考虑 Android 和 iOS 的编译问题,如果做了上面的修改才会在编译的时候忽略 dll_port 做到不同平台的兼容。