我有这个项目需要整合Box2D,Cocos2d-iPhone和iPhone蜡。 起初我把cocos2d-iphone和box2d放在一起,它给了我这个错误信息:
fatal error: 'cassert' file not found
#include <cassert>
^
我搜索并发现它是因为box2d是用c ++编写的,你必须将所有引用box2d的源文件设置为* .mm,这样Apple编译器就可以将它编译为object-c ++。
所以我只是将每个源文件更改为* .mm并且它有效。
然后我试着让iPhone上蜡。 iPhone蜡写在object-c和c中。它们提供了蜡框架。所以我下载它并将其拖入我项目的框架区域。它给了我这个错误:
"__Z9wax_startPcPFiP9lua_StateEz", referenced from:
_main in main_old.o
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
所以我再次搜索,我发现它是因为预期的库不存在。 我逐个列表检查,我很确定每个设置都是正确的,我找不到问题。
所以我做了一些测试。 我从其中一个模板中创建了一个新的示例项目,并且我将iPhone蜡放入其中并且工作正常。 然后我将main.m文件更改为main.mm,它就像上面一样给出了错误。
那么我该如何解决这个问题呢? 这是因为object-C ++无法导入object-c和c框架? 我应该重新创建框架并将所有名称更改为* .mm吗? 或者当我将源文件更改为* .mm并且应该有更好的解决方法时,我做错了吗?
答案 0 :(得分:0)
该函数实际上是一个名为wax_start()
的函数。所有其他废话都是由C ++编译器添加的名称修改。这需要支持重载,即另一个crap编码参数并返回wax_start()
类型。解决这个问题的最简单方法是告诉C ++编译器该头文件中的所有内容都是纯C,例如。
extern "C"
{
#import "Wax/whatever.h"
}
答案 1 :(得分:0)
不要使用main.mm,而是坚持使用main.m.无需为Box2D重命名main.m.这是有效的,因为您通常不在main.m中包含/导入任何Box2D(C ++)标头。
如果将Box2D(C ++)头文件添加到前缀头中,请确保它们仅包含在C ++(Objective-C ++)文件中,如下所示:
// C++ header files
#ifdef __cplusplus
#import "Box2D.h"
#endif // __cplusplus