CLANG dà errori lamentano file di intestazione difettoso UILocalizedIndexedCollation.h
Domanda
mi sono imbattuto in questo errore quando si costruisce il mio codice con 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.
Ho finito per dover escludere l'UILocalizedIndexedCollation.h da UIKit.h e tutto costruito bene. Qualche idea di cosa potrebbe aver causato il problema? Non riesco a immaginare di Apple è la spedizione di un file di intestazione difettoso.
Soluzione
Il problema deriva dal SDK 3.0, che ora usano gcc 4.2, ma la scansione-build ancora usare / usr / bin / gcc. Quindi è necessario dire scan-build da usare al posto /usr/bin/gcc-4.2.
scan-build --use-cc=/usr/bin/gcc-4.2 xcodebuild -configuration Debug
Et voilà!
Altri suggerimenti
ingegnere di Apple aveva confermato che avevano un bug nel quadro UIKit:
Abbiamo una soluzione semplice per questo UIKit bug. In UILocalizedIndexedCollation.h cambiare questo:
UIKIT_EXTERN @interface UILocalizedIndexedCollation : NSObject
to
UIKIT_EXTERN_CLASS @interface UILocalizedIndexedCollation : NSObject
Denis2342
Di solito quando vedo qualcosa di simile pulisce la costruzione e riavviare Xcode, allora le cose andavano bene. Con GCC 4.2 volte un cattivo PCH potrebbe provochino singhiozzo come questo, ma clang utilizza un'implementazione pch totoally differente. Si consiglia t cancellare completamente il dir accumulo mentre Xcode non è in esecuzione.
Tecnicamente clang non è supportato per lo sviluppo iPhone, ma lo uso per simulatore compila, e non vedo gli errori di compilazione che state vedendo, quindi (almeno per me) funziona. Una cosa che sporge nella mia testa, si fa riferimento a modificare l'UIKit.h. Capisco quello che hai fatto, ma modificando le intestazioni di sistema è grande no-no. C'è una possibilità che avete fatto per altre ragioni, perché se non si esegue collettori di Esiste un certo numero di ragioni per cui questo potrebbe accadere.