Je viens de mettre à niveau vers Snow Leopard, j'ai installé Xcode 3.2, puis j'ai installé l'iPhone SDK 3 pour SL.
Dans un projet, j'obtiens maintenant l'erreur suivante lors de la construction:
ld
: bibliothèque introuvable pour-lcrt1.10.6.o
J'ai cherché sur le net, mais rien d'utile ne peut être trouvé.
Modifier les paramètres du projet -> Dans l'onglet de construction -> Pour la cible de déploiement Mac OS X, changez-le en 10.5 pour XCode 3 (pas 10.6 même si sur 10.6) et voyez si cela aide.
Pour XCode 4, vous devrez le définir sur 10,6
P.S. Assurez-vous de le définir pour toutes les cibles, pas seulement pour la version ou le débogage. (si vous ne l'avez pas fait, l'un échouerait, l'autre non)
Ajoutez les éléments suivants à ~/.profile (pour Mac OS X 10.5):
export C_INCLUDE_PATH=/Developer/SDKs/MacOSX10.5.sdk/usr/include
export LIBRARY_PATH=/Developer/SDKs/MacOSX10.5.sdk/usr/lib
J'ai pu résoudre ce problème en ajoutant ce qui suit à mon Makefile:
CFLAGS="$(OTHER_CFLAGS) -mmacosx-version-min=10.5"
LDFLAGS="$(OTHER_LDFLAGS) -mmacosx-version-min=10.5"
En apparence, cela n'est requis que lors de la construction en dehors de Xcode. Ce problème m'a frustré assez longtemps pour que je pense qu'il serait utile de partager mon expérience ici.
Il semble que vous récupériez des bibliothèques dans/usr/lib, ce qui est totalement inapproprié pour le SDK iPhone. Je suppose que vous avez modifié vos paramètres de construction pour ajouter/usr/lib aux chemins de recherche de la bibliothèque. Cela devrait être complètement inutile en premier lieu, car/usr/lib se trouve dans les chemins de recherche standard du compilateur, mais si vous avez besoin d'avoir un chemin de recherche modifié comme celui-ci, assurez-vous d'utiliser $(SDKROOT)/usr/lib
à la place.
La définition de la cible de déploiement sur les valeurs par défaut du compilateur a résolu le problème. Ne changez rien d'autre.
Le compilateur utilise normalement crt1.o
combiné avec crt [i/n] .o et crt [début/fin] .o pour prendre en charge les constructeurs et les destructeurs (fonctions appelées avant et après main et exit).
Cette erreur peut être due à ce fichier de bibliothèque manquant pour la cible de déploiement spécifique.
Tout d'abord, faites une enquête, comme:
Énumérez toutes vos cibles de déploiement:
ls -la /Developer/SDKs
Trouvez lequel crt1
bibliothèques avez-vous pour quel environnement
find /Developer/SDKs -name crt1\*
Vous pouvez voir quelque chose comme:
/Developer/SDKs/MacOSX10.5.sdk/usr/lib/crt1.10.5.o
/Developer/SDKs/MacOSX10.5.sdk/usr/lib/crt1.o
/Developer/SDKs/MacOSX10.6.sdk/usr/lib/crt1.10.5.o
/Developer/SDKs/MacOSX10.6.sdk/usr/lib/crt1.10.6.o
/Developer/SDKs/MacOSX10.6.sdk/usr/lib/crt1.o
Comme vous pouvez le voir dans l'exemple ci-dessus, crt1.10.6.o
est manquant pour MacOSX10.5.
Vous pouvez résoudre ce problème en créant le lien vers le fichier manquant pointé vers l'autre environnement, ou vous pouvez modifier votre cible de déploiement. Par exemple.
ln -s /Developer/SDKs/MacOSX10.6.sdk/usr/lib/crt1.10.6.o /Developer/SDKs/MacOSX10.5.sdk/usr/lib/
Une autre raison pour laquelle il manque, c'est que vous pourriez avoir différents gcc
installés sur votre système. Par exemple.:
which gcc
xcrun -find gcc
brew list | grep gcc; brew list gcc47
Ainsi, lorsque vous compilez à l'aide de make, vous pouvez réellement spécifier le bon compilateur par variable CC. Par exemple.
CC=/path/to/gcc-3.4 make
Vous pouvez également essayer de spécifier la bonne variable d'environnement de déploiement cible pour gcc, par exemple:
export MACOSX_DEPLOYMENT_TARGET=10.5
Si cela fonctionne, vous pouvez ajouter ce chemin de bibliothèque à votre profil Shell (~/.profile
). Par exemple.
export C_INCLUDE_PATH=/Developer/SDKs/MacOSX10.5.sdk/usr/include
export LIBRARY_PATH=/Developer/SDKs/MacOSX10.5.sdk/usr/lib
Ou en les exportant temporairement.
Créez l'exemple conftest.c
fichier avec le code suivant:
#ifdef __GNUC__
yes;
#endif
Et essayez de le compiler via:
gcc conftest.c
cc conftest.c
cc conftest.cc conftest.c
J'ai eu le même problème dans un Makefile Fortran. Ajout de l'option suivante après le compilateur (pour OSX 10.5):
-L/Developer/SDKs/MacOSX10.5.sdk/usr/lib
par exemple.,
g77 -L/Developer/SDKs/MacOSX10.5.sdk/usr/lib
Maintenant, le compilateur trouvera la bibliothèque que vous voulez!
J'ai eu ce problème lorsque j'utilisais Xcode 4 sur une machine et Xcode 3.2.6 sur une autre. Les deux versions sont censées pouvoir échanger des fichiers .xcodeproj entre elles mais j'ai trouvé que dans le fichier project.pbxproj (à l'intérieur du répertoire .xcodeproj), il y avait encore quelques endroits qui lisaient:
MACOSX_DEPLOYMENT_TARGET = 10.6;
J'ai quitté Xcode et suis allé changer les trois occurrences en:
MACOSX_DEPLOYMENT_TARGET = 10.5;
Après avoir rouvert le projet, j'ai pu reconstruire. Ouf!
J'ai perdu quelques heures sur celui-ci ...
Fait intéressant, pour moi, le problème était uniquement pour Simulator-Debug. Il ne se plaignait pas de la sortie du simulateur ou du débogage/libération du périphérique!
de toute façon, changer la cible de déploiement à 10,5 a résolu cela pour moi !!
J'ai eu le même message d'erreur, aucune des solutions ci-dessus n'a fonctionné pour moi. Je l'ai résolu en supprimant les fichiers * .pbxuser et * .mode1v3 dans le fichier xcodeproj.
Ce problème a été résolu en définissant Mac OS X Deployment Target sur 10.5 et après cela défini à nouveau sur Compiler Default :)
Ajoutez les éléments suivants à ~/.profile (pour Mac OS X 10.5):export C_INCLUDE_PATH=/Developer/SDKs/MacOSX10.5.sdk/usr/include export LIBRARY_PATH=/Developer/SDKs/MacOSX10.5.sdk/usr/lib
Étant donné le scénario limité de Kirandan (Snow Leopard, Xcode 3.2.1, iphone, erreur de chemin de bibliothèque), la réponse de Stefan (ci-dessus) a fonctionné pour moi, sauf que mon exception était avec 10.5 (-lcrt1.10.5.o).
Ailleurs, j'avais vu une réponse de Gabor Cselle (auteur de reMail), et il a résolu ce problème spécifique en utilisant un lien symbolique (quelqu'un a référencé cette page, soit dit en passant), mais il a noté que ce n'était pas la meilleure façon.