2012-05-23 45 views
2

问题可能涉及使用Apple的LLVM 3.1编译器,我相信可以通过禁用NEON来解决此问题。但是我们想使用NEON。XCode IOS Apple LLVM 3.1 - Eigen NEON中断

我也很积极这是我在XCode中的设置错误,但它可能与苹果。真的,我只是向正确的方向伸出一些提示。

/Eigen/src/Core/util/Macros.h 
188:Unknown type name 'namespace' 
188: Expected ';' after top level declarator 

/Eigen/Core 
144:'cerrno' file not found 

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/3.1/include/arm_neon.h 
55: Unknown type name 'float32_t' 

该缺失float32_t错误发生在该文件中的每个实例。即使第33行的typedef显然已完成。

更新: 如果我强制#define EIGEN_NO_DEBUG那么剩下的唯一错误就是缺少cerrno。实际上,似乎所有的cXXX库缺失(例如cstdlib)。但如果我把它们包括在Eigen之外的话,它们就会工作。

+3

第一个错误让我觉得你是用clang编译而不是用clang ++,或者至少用c编译器而不是C++编译器。 –

+0

我包含一些C++文件(包括Eigen)的文件是一个.mm文件,因此我认为它会使用clang ++。我还没有想出如何告诉XCode向我展示它的编译器日志,所以我真的明白它在做什么。 – Halsafar

+1

感谢sharth。问题被发现。 在“SupportingFiles”下是main.m.这意味着clang被用于编译包含这些文件的main.m,并最终导致Eigen被编译错误。我很惊讶没有一百万以上的错误。 将main.m重命名为main.mm,解决了问题。 我无法回答我自己的问题... +1代表短。 – Halsafar

回答

4

正如评论中提到的那样,问题是源代码被编译为Objective-C而不是Objective-C++。修复这个问题解决了这个问题。

具体由文件(main.m)未被重命名为(main.mm)引起。如果您将文件重命名为.mm,则使用ObjC++(clang ++),然后确保将它们全部取出。