2009-08-04 10 views
0

J'inclus le code sqlite amalgamation dans mon projet iPhone, et supprime la référence au framework sqlite de l'iPhone.erreur: erreur de syntaxe avant le jeton '@' (pourquoi?)

Ma cible principale compile bien. J'ai une deuxième cible pour les tests unitaires avec le google framework. Lorsque compiler je reçois:

error: syntax error before '@' token

Je ne comprends pas pourquoi. J'ai mis les deux projets à SDK 2.

MISE À JOUR: J'inclus le lien vers le code sqlite & google. Je dois ajouter que la cible compile bien pendant des mois avant d'ajouter le code sqlite. Je ne code postal pas exemple parce que je reçois 1263 erreurs - donc j'obtiens l'erreur dans tous les fichiers -, mais cela est un échantillon retraçage:

@class NSString, Protocol; <== ERROR HERE 

Traceback:

 cd /Users/trtrrtrtr/mamcx/projects/JhonSell/iPhone 
     setenv PATH "/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin" 
     /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.0 -x c-header -arch i386 -fmessage-length=0 -pipe -std=c99 -Wno-trigraphs -fpascal-strings -fasm-blocks -O0 -Wreturn-type -Wunused-variable -D__IPHONE_OS_VERSION_MIN_REQUIRED=20000 -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.2.1.sdk -fvisibility=hidden -mmacosx-version-min=10.5 -gdwarf-2 -iquote /Users/trtrrtrtr/mamcx/projects/JhonSell/iPhone/build/JhonSell.build/Debug-iphonesimulator/Testing.build/Testing-generated-files.hmap -I/Users/trtrrtrtr/mamcx/projects/JhonSell/iPhone/build/JhonSell.build/Debug-iphonesimulator/Testing.build/Testing-own-target-headers.hmap -I/Users/trtrrtrtr/mamcx/projects/JhonSell/iPhone/build/JhonSell.build/Debug-iphonesimulator/Testing.build/Testing-all-target-headers.hmap -iquote /Users/trtrrtrtr/mamcx/projects/JhonSell/iPhone/build/JhonSell.build/Debug-iphonesimulator/Testing.build/Testing-project-headers.hmap -F/Users/trtrrtrtr/mamcx/projects/JhonSell/iPhone/build/Debug-iphonesimulator -F/Volumes/CrashReporter-1.0-rc2/CrashReporter-iPhone -F/Users/trtrrtrtr/mamcx/projects/JhonSell/iPhone -I/Users/trtrrtrtr/mamcx/projects/JhonSell/iPhone/build/Debug-iphonesimulator/include -I/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.2.1.sdk/usr/include/libxml2 "-I/Developer/RemObjects Software/Source" -I/Users/trtrrtrtr/mamcx/projects/JhonSell/iPhone/build/JhonSell.build/Debug-iphonesimulator/Testing.build/DerivedSources/i386 -I/Users/trtrrtrtr/mamcx/projects/JhonSell/iPhone/build/JhonSell.build/Debug-iphonesimulator/Testing.build/DerivedSources -c /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.2.1.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIKit.h -o /var/folders/EA/EAmC8fuyElexZfnpnjdyr++++TI/-Caches-/com.apple.Xcode.501/SharedPrecompiledHeaders/UIKit-dqqtnrciylhdtjbmyglpcezxchmz/UIKit.h.gch 
    In file included from /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.2.1.sdk/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h:12, 
        from /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.2.1.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIAccelerometer.h:8, 
        from /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.2.1.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIKit.h:9: 
    /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.2.1.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:120: 
error: syntax error before '@' token 
+2

Comment publier le code? Pas grand chose que je puisse dire d'autre ... –

+1

Vous devriez au moins poster le code dans lequel l'erreur se produit. Le message d'erreur devrait vous dire dans quelle ligne le it. – sth

+1

et les dieux sont venus du ciel et nous ont dit de quoi vous parliez. Je ne pense pas ainsi –

Répondre

2

J'ai enfin compris le problème.

-je copier ce de la cible iPhone à la cible Test:

GCC_DYNAMIC_NO_PIC = NO 
GCC_OPTIMIZATION_LEVEL = 0 
GCC_PRECOMPILE_PREFIX_HEADER = YES 
GCC_PREFIX_HEADER = JhonSell_Prefix.pch 
GCC_PREPROCESSOR_DEFINITIONS = DEBUG 

Mais pourquoi avant que je n'ai pas des questions? Je ne comprends vraiment pas.

+1

J'ai rencontré le même problème avec mon projet de bibliothèque statique iPhone. Ma cible Tests utilise GHUnit, mais cela ne semble pas avoir d'importance.Initialement, tout s'est bien passé, mais après avoir ajouté une autre dépendance à la bibliothèque statique et un code tiers supplémentaire, j'ai eu la même erreur que vous. Le correctif principal semble être de changer le paramètre d'en-tête de préfixe par défaut (le mien était '$ (SYSTEM_LIBRARY_DIR)/Frameworks/UIKit.framework/Headers /') au même que la cible principale (par exemple 'MyProject_Prefix.pch'). Merci de m'avoir mis sur la bonne voie. :) –

1

Avec très peu d'aller Sur, je suppose serait d'inclure un en-tête Objective C à partir d'un fichier d'implémentation C/C++, donc compiler l'en-tête en C/C++ au lieu de Objective C/Objective C++.

En regardant vos informations mises à jour, vous êtes en train de compiler un fichier d'en-tête, à savoir UIKit.h. Le compilateur n'a aucune idée de quel type de fichier d'en-tête il est, donc il est par défaut C, ce qui bien sûr n'a pas @class et donc l'erreur de syntaxe.

Vous devrez donc comprendre pourquoi Xcode veut compiler UIKit.h dans votre deuxième cible.

+0

ET comment je figure cela? Je n'ai aucune idée de cette erreur. – mamcx

0

Votre ligne de commande gcc compile un fichier .h dans un fichier .gch.

/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.0 
    # ... 
    -x c-header -arch i386 -fmessage-length=0 -pipe -std=c99 -Wno-trigraphs # ... 
    # ... 
    # THE INPUT FILE: 
    /Developer/Platforms/iPhoneSimulator.platform/Developer/ 
     SDKs/iPhoneSimulator2.2.1.sdk/System/Library/Framework/ 
     UIKit.framework/Headers/UIKit.h 
    # THE OUTPUT FILE: 
    -o /var/folders/EA/EAmC8fuyElexZfnpnjdyr++++TI/ 
     -Caches-/com.apple.Xcode.501/ 
     SharedPrecompiledHeaders/UIKit-dqqtnrciylhdtjbmyglpcezxchmz/UIKit.h.gch 

I.e. UIKit.h en UIKit.h.gch: traduire un fichier d'en-tête dans un en-tête "précompilé" qui peut être inclus plus rapidement car il est sous une forme tokenisée.

On dirait que le compilateur ne sait pas qu'il est supposé précompiler un en-tête; il est mal configuré d'une manière ou d'une autre et ne fait que traiter ce code comme étant réellement compilé, et s'étouffer parce que le code est l'objectif C.

+0

Oups, n'a pas remarqué c'est ooold. Eh bien, il est de toute façon. – Kaz