Joa*_*all 3 objective-c objective-c++ cocos2d-iphone box2d-iphone ios
所以我想在我的cocos2d + box2d项目中公开公开一个指向其他Objective-C++类的Box2D(C++)指针.我在我的界面中声明了一个方法"getWorld",它引用了C++类b2World并导入了Box2D.h.我项目中的所有文件都是.mm扩展名,我收到以下编译错误:
In file included from DebugDrawLayer.mm:2:
In file included from World.h:10:
In file included from external/Box2d/Box2D/Box2D.h:34:
external/Box2d/Box2D/Common/b2Settings.h:22:10: fatal error: 'cassert' file not found
#include <cassert>
Run Code Online (Sandbox Code Playgroud)
我猜Box2D.h以某种方式编译为C而不是C++,但我不明白这是怎么发生的.根据日志,包含链明显从.mm文件开始.
更新:
对于World.mm(之前编译)的日志说明它明确编译为objective-c ++
CompileC Objects-normal/i386/World.o World.mm normal i386 objective-c++ com.apple.compilers.llvm.clang.1_0.compiler
Run Code Online (Sandbox Code Playgroud)
但对于DebugDrawLayer.mm,它表示objective-c
CompileC Objects-normal/i386/DebugDrawLayer.o DebugDrawLayer.mm normal i386 objective-c com.apple.compilers.llvm.clang.1_0.compiler
Run Code Online (Sandbox Code Playgroud)
这两个文件都设置为默认值 - Objective-C++ source.是什么赋予了..?
Ada*_*dam 19
这似乎是Xcode4中的一个主要错误,与编译器设置无关 - 只是Xcode内部.
更新:
我最终找到了根本原因.是的,这是Xcode/LLVM中的一个错误.它以错误的顺序编译文件,然后覆盖自己的设置,并打破自己.苹果公司的技术支持太难以理解问题了,所以我怀疑他们很快就会修复这个漏洞.
(注意:跳过这一部分,见下文,我的原始答案,给出了一个强大的力量,但非常快速的解决方案)
会发生什么......如果编译器在处理 C类时 "看到"C++标题......然后将标题(内部)标记为"C"(即使这实际上是不可能的).
稍后,当它回到那个标题时,试图用C++编译它,它发现它已经告诉自己标题是"C"(因为它非常愚蠢)......并且很快就崩溃了.
在正确的解决方案(这需要大量的时间和精力)是要经过在你的项目中的每个C文件,并检查(手动,因为Xcode的很烂)EVERY提法,每个头文件-和,为每一个每头文件,它进口......等
(这可能需要数小时)
...直到找到导致C文件"看到"C++标头的导入链.
所有这些都应该是自动化的(但不是).并且根本问题不应该发生(如果Xcode被正确写入).
我尝试了网上其他地方列出的所有内容,大多数解决方案是"继续删除/添加文件,如果你很幸运,最终Xcode会自行修复".
我不幸运.唯一有效的是:
实际的名称/值是:"GCC_INPUT_FILETYPE = sourcecode.cpp.objcpp" - 所以我猜测这是避开Xcode(破碎!)内部逻辑.
| 归档时间: |
|
| 查看次数: |
6831 次 |
| 最近记录: |