Les en-têtes précompilés et la compilation universelle des objets sur OSX
Nous sommes en utilisant les en-têtes précompilés avec GCC pour notre projet et créer comme ceci:
gcc $(CFLAGS) precompiledcommonlib.h
Maintenant, je suis en train de construire le projet sur OSX 10.6 et tente d'utiliser la fonctionnalité astucieuse de la construction pour toutes les architectures en même temps, comme ceci:
gcc $(CFLAGS) -c -arch i386 -arch x86_64 commonlib.c
Cependant, il semble que cela ne fonctionne pas pour les en-têtes précompilés:
gcc $(CFLAGS) -arch i386 -arch x86_64 precompiledcommonlib.h
Undefined symbols for architecture i386:
"_main", referenced from:
start in crt1.10.6.o
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status
Undefined symbols for architecture x86_64:
"_main", referenced from:
start in crt1.10.6.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
lipo: can't open input file: /var/folders/z1/z1A0sPkqGDyPrZWo9ysVK++++TI/-Tmp-//cc3W2gwd.out (No such file or directory)
Edit:
Comme Mark l'a souligné, comme par XCode l'en-tête précompilé doit être établi séparément pour chaque architecture, donc ma question est plutôt si il y a une façon de gcc utilisation le droit d'en-tête précompilé lors de la construction universelle objets.
Je ne rends compte que je pouvais construire chaque architecture complètement séparé comme XCode fait, mais je préférerais prendre avantage de la possibilité de construire en même temps et de ne pas avoir à déranger les différentes configurations de génération.
-arch
drapeaux. L'intervalle Qt gars semblent être en train de faire quelque chose d'étrange à obtenir que cela fonctionne, vous pouvez le vérifier... qt.gitorious.org/qt/qt/merge_requests/2193OriginalL'auteur rasmusb | 2009-11-18
Vous devez vous connecter pour publier un commentaire.
Je viens de tomber sur les mêmes questions, et suivi avec le lien fourni par @lucas, j'ai donc pensé que je pourrais offrir ce que j'ai trouvé ici.
D'abord de noter que si vous êtes portage de gcc code de Linux à mac os, la version de gcc fourni par apple n'est pas détecté correctement .php extension de fichier.
Comme mentionné dans une autre réponse, il est préférable de spécifier la
-x
argument assurez-vous que gcc sait quel type de fichier vous compilation.Cela crée attendus
test.hpp.gch
.Vous pouvez spécifier n'importe quelle architecture sur la ligne de commande et la gch crée correctement
ou
Si vous fournissez plus d'une architecture, vous obtenez le message d'erreur de l'affiche mentionnée.
La clé est de compiler les architectures que vous devez séparément, puis utiliser le
-Xarch_
argument à charge le plus approprié lors de la compilation:OriginalL'auteur lefticus
Votre problème n'est pas l'architecture. Les deux sont à défaut
Le problème, c'est que vous essayez de créer un fichier exécutable sans une fonction principale.
Que le nom de fichier est commonlib.c je soupçonne que vous souhaitez construire une bibliothèque si afin de démarrer le projet avec un modèle de bibliothèque dans XCode.
J'ai fait un mélange de l'lignes de commande désolé. Cependant, Les messages d'erreur et de ligne de commande sont en train de construire un exécutable. - c'est pourquoi ld est la ligne de commande en donnant l'erreur j'ai toujours mis cela dans Xcode pour obtenir tous les drapeaux correcte. Si vous avez eu, vous serait-se que Apple précompilation chaque en-tête séparément pour chaque architecture et de la ligne de commande comprend -x objective-c-en-tête -arch x86_64 Apple docs <developer.apple.com/Mac/library/documentation/DeveloperTools/...> suggèrent également la x paramètre. amd détails sur différentes architectures.
Bon appel. J'obtiens cette erreur quand je créer un projet sans méthode main
OriginalL'auteur Mark
Cela pourrait fonctionner pour vous
OriginalL'auteur Volkan Zulal