CLANG提出错误抱怨有缺陷的头文件UILocalizedIndexedCollat​​ion.h

时间:2009-07-03 06:32:37

标签: iphone clang

在使用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中排除UILocalizedIndexedCollat​​ion.h并且一切都很好。知道什么可能导致问题吗?我无法想象Apple正在发送有缺陷的头文件。

3 个答案:

答案 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错误提供了一个简单的解决方法。在UILocalizedIndexedCollat​​ion.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。我明白你做了什么,但调整系统标题是不容易的。您是否有可能出于其他原因而这样做,因为如果您没有运行库存标题,可能会出现任何原因。