在使用CLANG构建代码时遇到了此错误:
In file included from /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIKit.h:31, from /Users/waspfish/Documents/NanaimoStudio/Projects/iPhoneMonk/Projects/IdeaOrganizer/IdeaOrganizer_Prefix.pch:13, from :1: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk/System/Library/Frameworks/UIKit.framework/Headers/UILocalizedIndexedCollation.h:13: error: syntax error before ‘AT_NAME’ token /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk/System/Library/Frameworks/UIKit.framework/Headers/UILocalizedIndexedCollation.h:21: error: syntax error before ‘}’ token /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk/System/Library/Frameworks/UIKit.framework/Headers/UILocalizedIndexedCollation.h:23: fatal error: method definition not in @implementation context compilation terminated. {standard input}:32:FATAL:.abort detected. Assembly stopping.
我最终不得不从UIKit.h中排除UILocalizedIndexedCollation.h并且一切都很好。知道什么可能导致问题吗?我无法想象Apple正在发送有缺陷的头文件。
答案 0 :(得分:7)
问题来自SDK 3.0,它现在使用gcc 4.2但是scan-build仍然使用/ usr / bin / gcc。因此,您需要告诉scan-build使用/usr/bin/gcc-4.2。
scan-build --use-cc=/usr/bin/gcc-4.2 xcodebuild -configuration Debug
Et瞧!
答案 1 :(得分:2)
Apple的工程师确认他们在UIKit框架中有一个错误:
我们确实为此UIKit错误提供了一个简单的解决方法。在UILocalizedIndexedCollation.h中更改:
UIKIT_EXTERN @interface UILocalizedIndexedCollation : NSObject
to
UIKIT_EXTERN_CLASS @interface UILocalizedIndexedCollation : NSObject
Denis2342
答案 2 :(得分:0)
通常当我看到这样的东西时,我清理构建并重新启动Xcode,然后事情就好了。有了GCC 4.2,有时一个糟糕的pch可能会导致像这样的打嗝,但是clang使用了一个完全不同的pch实现。您可能希望在Xcode未运行时完全删除构建目录。
技术上clang不支持iPhone开发,但是我用它来进行模拟器编译,我没有看到你看到的编译错误,所以(至少对我而言)它有效。有一件事在我脑海中浮现,你指的是编辑你的UIKit.h。我明白你做了什么,但调整系统标题是不容易的。您是否有可能出于其他原因而这样做,因为如果您没有运行库存标题,可能会出现任何原因。