web-dev-qa-db-fra.com

Erreur dans le projet xcode: ld: bibliothèque introuvable pour -lcrt1.10.6.o

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é.

26
kindaran

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)

15
Headrush69

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
11
Stefan

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.

6
user196865

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.

3
Lily Ballard

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.

2
ashna

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:

  1. Énumérez toutes vos cibles de déploiement:

    ls -la /Developer/SDKs
    
  2. 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.

Solution 1

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

Solution 2

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

Solution 3

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.


Comment tester

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
2
kenorb

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!

1
user1270809

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!

1
Ben Golding

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 !!

1
prakash

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.

  1. Contrôlez/cliquez sur le fichier xcode * .xcodeproj
  2. Sélectionnez l'option "afficher le contenu du package" dans le menu
  3. Une fenêtre s'ouvrira avec le contenu
  4. Supprimez les fichiers pbxuser/mode1v3 qui commencent par votre nom d'utilisateur
  5. Reconstruire le projet
1
Geoff Smith

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 :)

1
beryllium
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.

0
michaelok