2009-10-26 4 views
1

Je suis en train de compiler un code pour le simulateur d'iPhone, mais je obtenir cette erreur:erreur de compilation pour le simulateur d'iPhone

/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 -O3 -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk -Os -O3 -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk -Os -x objective-c -I../../include -c version.c  
    In file included from /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk/System/Library/Frameworks/Security.framework/Headers/Security.h:29, 
        from /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSURLCredential.h:14, 
        from /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h:80, 
        from version.c:11: 
    /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk/System/Library/Frameworks/Security.framework/Headers/SecKey.h:166: error: expected declaration specifiers or ‘...’ before ‘SecPadding’ 
    /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk/System/Library/Frameworks/Security.framework/Headers/SecKey.h:196: error: expected declaration specifiers or ‘...’ before ‘SecPadding’ 
    /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk/System/Library/Frameworks/Security.framework/Headers/SecKey.h:228: error: expected declaration specifiers or ‘...’ before ‘SecPadding’ 
    /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk/System/Library/Frameworks/Security.framework/Headers/SecKey.h:257: error: expected declaration specifiers or ‘...’ before ‘SecPadding’ 
    make: *** [version.o] Error 1 

Cependant, si je compile pour l'iPhone réelle, il fonctionne très bien:

/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 -O3 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk -arch armv6 -Os -O3 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk -arch armv6 -Os -x objective-c -I../../include -c version.c  

Ce problème se produit avec un fichier aussi simple que Foundation.h y compris sans autre code:

#import <Foundation/Foundation.h> 

Des idées sur ce sujet? L'étrange c'est que je m'attendrais à ce que cela échoue à la fois pour l'iPhone et le simulateur.

EDIT: fyi, je n'utilise pas XCode. C'est un grand projet multiplateforme utilisant Makefiles. Les commandes que vous voyez ci-dessus ont été émises à partir du Makefile. Etes-vous sûr que vos paramètres sont identiques entre les deux projets?

+0

Cela ne vous aide pas dans ce cas, mais saviez-vous que vous pouvez créer un projet XCode via la ligne de commande? Voir http://stackoverflow.com/questions/377992/building-xcode-projects-from-the-command-line –

+0

Merci pour le conseil. Mais ouais ce n'est pas utile dans ce cas puisque nous utilisons simplement Makefiles. – paleozogt

Répondre

4

je vis la même chose. Le correctif consiste à ajouter une directive de compilation -miphoneos-version-min = 3.0.

+0

Après quelques considérations (et expérimentation) je pense que c'est la meilleure réponse. -miphoneos-version-min semble être l'équivalent iphone de -mmacosx-version-min. – paleozogt

+0

Btw, que voulez-vous dire "ajouter une -miphoneos-version-min = 3.0 directive du compilateur"? Est-ce qu'il ajoute un nouveau drapeau d'autres liens dans les paramètres du projet? – Artem

0

Etes-vous sûr que vos paramètres sont identiques entre les deux projets? Je parie que vous avez accidentellement changé certains paramètres du simulateur.

+0

Ce n'est qu'un projet. Je n'utilise pas XCode. – paleozogt

0

Cliquez avec le bouton droit sur le cadre et cliquez sur Obtenir des informations. Jetez un coup d'œil sur le chemin dans la boîte de dialogue Info. Il doit être court, comme "System/Library/Frameworks /"

Si ce n'est pas le cas, utilisez le bouton Choisir pour trouver l'infrastructure sous le dossier du SDK actuel.

Assurez-vous également que, juste en dessous du chemin, vous voyez l'option "Relative to Current SDK" sélectionnée.

+0

Cliquez avec le bouton droit sur le framework ... dans le Finder? Peut-être que vous voulez dire dans XCode. fyi Je n'utilise pas XCode. – paleozogt

0

Lorsque vous avez ajouté les cadres à votre projet, avez-vous défini la case à cocher sur OUI lorsque vous avez demandé si vous vouliez copier le cadre dans le dossier du projet. Si c'est le cas, la case à cocher doit être NON.

Cela se produit également si vous créez un nouveau projet et essayez d'exécuter sans y ajouter quoi que ce soit, car il est possible que vous avez accidentellement changé les drapeaux de compilation dans ce projet

+0

Je n'utilise pas XCode. – paleozogt

1

Le problème ne se produit que si vous utilisez SDK 3,0 avec le simulateur d'iphone. L'utilisation de SDK 2.0 (avec gcc 4.0) se compilera. Cela semble être ce que XCode utilise par défaut.

Il est très étrange que ce problème est uniquement pour le simulateur et non pour l'iphone lui-même. Également étrange est que gcc4.2 ne compilera pas avec le simulateur sdk 2.0 - vous devez utiliser gcc4.0.

Pour les curieux, j'ai écrit un Makefile qui illustre le problème:

IPHONE_GCC_VER = 4.0 
IPHONE_SDK_VER = 3.0 
IPHONE_DEV_PATH = /Developer/Platforms/iPhoneOS.platform/Developer 
IPHONE_SDK  = $(IPHONE_DEV_PATH)/SDKs/iPhoneOS$(IPHONE_SDK_VER).sdk 
IPHONE_GCC  = $(IPHONE_DEV_PATH)/usr/bin/gcc-$(IPHONE_GCC_VER) 

SIMULATOR_GCC_VER = 4.0 
SIMULATOR_SDK_VER = 2.0 
SIMULATOR_DEV_PATH= /Developer/Platforms/iPhoneSimulator.platform/Developer 
SIMULATOR_SDK  = $(SIMULATOR_DEV_PATH)/SDKs/iPhoneSimulator$(SIMULATOR_SDK_VER).sdk 
SIMULATOR_GCC  = $(SIMULATOR_DEV_PATH)/usr/bin/gcc-$(SIMULATOR_GCC_VER) 

TEST_FILE=/tmp/test.m 

all: info make-test-file 
    $(IPHONE_GCC) -isysroot $(IPHONE_SDK) -arch armv6 -c $(TEST_FILE) 
    $(SIMULATOR_GCC) -isysroot $(SIMULATOR_SDK) -arch i386 -c $(TEST_FILE) 

info: 
    @echo "iphone gcc : $(IPHONE_GCC_VER)" 
    @echo "iphone sdk : $(IPHONE_SDK_VER)" 
    @echo "simulator gcc: $(SIMULATOR_GCC_VER)" 
    @echo "simulator sdk: $(SIMULATOR_SDK_VER)" 
    @echo "" 

make-test-file: 
    echo "#import <Foundation/Foundation.h>" > $(TEST_FILE) 

Les valeurs par défaut sont ceux qui travaillent, mais vous pouvez les remplacer sur la ligne de commande. Par exemple:

$ make -f Makefile.iphone-error-demo SIMULATOR_SDK_VER=3.0 SIMULATOR_GCC_VER=4.0 
iphone gcc : 4.0 
iphone sdk : 3.0 
simulator gcc: 4.0 
simulator sdk: 3.0 

echo "#import <Foundation/Foundation.h>" > /tmp/test.m 
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.0 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk  -arch armv6 -c /tmp/test.m 
/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.0 -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk -arch i386 -c /tmp/test.m 
In file included from /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk/System/Library/Frameworks/Security.framework/Headers/Security.h:29, 
       from /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSURLCredential.h:14, 
       from /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h:80, 
       from /tmp/test.m:1: 
/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk/System/Library/Frameworks/Security.framework/Headers/SecKey.h:166: error: syntax error before ÔSecPaddingÕ 
/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk/System/Library/Frameworks/Security.framework/Headers/SecKey.h:196: error: syntax error before ÔSecPaddingÕ 
/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk/System/Library/Frameworks/Security.framework/Headers/SecKey.h:228: error: syntax error before ÔSecPaddingÕ 
/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk/System/Library/Frameworks/Security.framework/Headers/SecKey.h:257: error: syntax error before ÔSecPaddingÕ 
make: *** [all] Error 1 

ou

$ make -f Makefile.iphone-error-demo SIMULATOR_SDK_VER=2.0 SIMULATOR_GCC_VER=4.2 
iphone gcc : 4.0 
iphone sdk : 3.0 
simulator gcc: 4.2 
simulator sdk: 2.0 

echo "#import <Foundation/Foundation.h>" > /tmp/test.m 
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.0 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk  -arch armv6 -c /tmp/test.m 
/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.0.sdk -arch i386 -c /tmp/test.m 
In file included from /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.0.sdk/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h:12, 
       from /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.0.sdk/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h:6, 
       from /tmp/test.m:1: 
/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.0.sdk/usr/include/stdarg.h:4:25: error: stdarg.h: No such file or directory 
In file included from /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.0.sdk/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h:16, 
       from /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.0.sdk/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h:6, 
       from /tmp/test.m:1: 
/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.0.sdk/usr/include/float.h:8:24: error: float.h: No such file or directory 
In file included from /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.0.sdk/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverServices.h:32, 
       from /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.0.sdk/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h:125, 
       from /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.0.sdk/System/Library/Frameworks/CoreServices.framework/Frameworks/AE.framework/Headers/AE.h:20, 
       from /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.0.sdk/System/Library/Frameworks/CoreServices.framework/Headers/CoreServices.h:21, 
       from /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.0.sdk/System/Library/Frameworks/ApplicationServices.framework/Headers/ApplicationServices.h:2, 
       from /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.0.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSAppleEventDescriptor.h:8, 
       from /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.0.sdk/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h:107, 
       from /tmp/test.m:1: 
/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.0.sdk/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MachineExceptions.h:29:23: error: xmmintrin.h: No such file or directory 
In file included from /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.0.sdk/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverServices.h:32, 
       from /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.0.sdk/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h:125, 
       from /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.0.sdk/System/Library/Frameworks/CoreServices.framework/Frameworks/AE.framework/Headers/AE.h:20, 
       from /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.0.sdk/System/Library/Frameworks/CoreServices.framework/Headers/CoreServices.h:21, 
       from /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.0.sdk/System/Library/Frameworks/ApplicationServices.framework/Headers/ApplicationServices.h:2, 
       from /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.0.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSAppleEventDescriptor.h:8, 
       from /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.0.sdk/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h:107, 
       from /tmp/test.m:1: 
/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.0.sdk/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MachineExceptions.h:216: error: expected specifier-qualifier-list before Ô__m128Õ 
make: *** [all] Error 1 
+0

Pas exactement une réponse à la question. Mais je vois la même chose ici. – tcurdt

0

Cela devrait être fixé en ajoutant ceci aux options du compilateur:

-D__IPHONE_OS_VERSION_MIN_REQUIRED=30000 
+0

Bien que cela ne semble pas résoudre le problème pour v2 du SDK, il le * corrige * pour v3. Woot! – paleozogt

+0

Après quelques considérations (et expérimentation), je pense que "-miphoneos-version-min" est la meilleure réponse ... – paleozogt

0

J'ai rencontré ce problème lors de la modification d'un projet de la version 3.2 vers la version 4.1. Il s'avère que la solution était en train de changer le cible de déploiement iOS dans les paramètres de construction de mon projet de 2.0 à 3.0.

Cliquez avec le bouton droit de la souris sur votre projet dans xcode (si vous l'utilisez), volet de construction, iOS Deployment Target -> 3.0.

+1

Comme je l'ai dit dans la question (et dans les réponses à la plupart des réponses), * Je n'utilise pas Xcode * – paleozogt