0

我有这个项目需要集成 Box2D、Cocos2d-iPhone 和 iPhone 蜡。起初我把 cocos2d-iphone 和 box2d 放在一起,它给了我这个错误信息:

    fatal error: 'cassert' file not found
    #include <cassert>
             ^

我查了一下发现是因为box2d是用c++写的,你必须把所有引用box2d的源文件都设置为*.mm,这样苹果编译器才能把它编译成object-c++。

所以我只是将每个源文件都更改为 *.mm 并且它起作用了。

然后我试着把 iPhone 蜡放进去。iPhone 蜡是用 object-c 和 c 编写的。他们提供了一个wax.framework。所以我下载它并将它拖到我项目的框架区域中。它给了我这个错误:

     "__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 时我做错了,应该有更好的解决方法?

4

2 回答 2

0

该函数实际上是一个名为 的函数wax_start()。所有其他废话都是 C++ 编译器添加的名称修改。这是支持重载所需要的,即其他废话编码的参数和返回类型wax_start()。解决这个问题的最简单方法是告诉 C++ 编译器该头文件中的所有内容都是纯 C,例如

extern "C"
{
 #import "Wax/whatever.h"
}
于 2012-05-25T09:39:31.207 回答
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
于 2012-05-25T11:22:21.750 回答