4

CLANG でコードをビルドすると、次のエラーが発生しました。

/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,
                 から :1:
/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk/System/Library/Frameworks/UIKit.framework/Headers/UILocalizedIndexedCollat​​ion.h:13: エラー: 'AT_NAME' トークンの前の構文エラー
/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk/System/Library/Frameworks/UIKit.framework/Headers/UILocalizedIndexedCollat​​ion.h:21: エラー: '}' トークンの前の構文エラー
/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk/System/Library/Frameworks/UIKit.framework/Headers/UILocalizedIndexedCollat​​ion.h:23: 致命的なエラー: メソッド定義が @implementation コンテキストにない
コンパイルが終了しました。
{標準入力}:32:FATAL:.abort が検出されました。組立停止中。

UIKit.h から UILocalizedIndexedCollat​​ion.h を除外する必要があり、すべて正常にビルドされました。何が問題を引き起こしたのでしょうか?Apple が欠陥のあるヘッダー ファイルを出荷しているとは思えません。

4

3 に答える 3

7

この問題は、現在 gcc 4.2 を使用している SDK 3.0 に起因しますが、scan-build はまだ /usr/bin/gcc を使用しています。そのため、代わりに /usr/bin/gcc-4.2 を使用するように scan-build に指示する必要があります。

scan-build --use-cc=/usr/bin/gcc-4.2 xcodebuild -configuration Debug

出来上がり!

于 2009-07-08T09:07:20.733 に答える
2

Apple’s engineer had confirmed that they had a bug in UIKit framework:

We do have a simple workaround for this UIKit bug. In UILocalizedIndexedCollation.h change this:

UIKIT_EXTERN @interface UILocalizedIndexedCollation : NSObject
to
UIKIT_EXTERN_CLASS @interface UILocalizedIndexedCollation : NSObject 

Denis2342

于 2009-11-22T23:47:25.923 に答える
0

通常、このような問題が発生した場合、ビルドをクリーンアップして Xcode を再起動すると、問題はなくなります。GCC 4.2 では、悪い pch がこのような問題を引き起こすことがありますが、clang はまったく異なる pch 実装を使用しています。Xcode が実行されていないときに、ビルド ディレクトリを完全に削除したくない場合があります。

技術的には、clang は iPhone 開発ではサポートされていませんが、私はシミュレーターのコンパイルに使用しており、あなたが見ているコンパイル エラーは見られないので、(少なくとも私にとっては) 動作します。私の頭の中で突き出ていることが 1 つあります。あなたは UIKit.h の編集について言及しています。あなたが何をしたかは理解していますが、システムヘッダーを微調整することは大したことではありません。ストックヘッダーを実行していない場合、これが発生する可能性がある理由はいくつかあるため、他の理由でそれを行った可能性はありますか.

于 2009-07-03T07:40:18.857 に答える