web-dev-qa-db-fra.com

ld: bibliothèque non trouvée pour -lstdc ++. 6

Après la mise à jour de la version 10.0 de Xcode Version, commencez à obtenir l'erreur "ld: library non trouvée pour -lstdc ++. 6". le même code fonctionne très bien dans Xcode 9.2

Également mis à jour macOS à 10.13.5

24
vks

La solution rapide consiste à copier tous les fichiers libstdc ++. * De l'ancien Xcode (9.4) vers le nouveau Xcode (10.x).

Pour appareil:

cp /Applications/Xcode9.4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/libstdc++.*/Applications/Xcode10.app/Contents/Developer/Platforms/phone. plate-forme/développeur/SDK/iPhoneOS.sdk/usr/lib /

Pour simulateur:

cp /Applications/Xcode9.4.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/libstdc++.* /Applications/Xcode10.app/Developer/Developer plate-forme/développeur/SDKs/iPhoneSimulator.sdk/usr/lib /

11
Shamsher Singh

Vous aurez ce problème lorsque vous ciblez l'application iOS. C'est indiqué dans la note de version:

Avis de dépréciation :

La compilation avec libstdc ++ était obsolète avec Xcode 8 et n'est pas prise en charge dans Xcode 10 pour cibler iOS . Les projets C++ doivent maintenant migrer vers libc ++ et il est recommandé de définir une cible de déploiement d'iOS 7 ou ultérieure. Outre la modification du paramètre de construction de la bibliothèque standard C++, les développeurs doivent également auditer les indicateurs de lieur et les dépendances cibles pour supprimer les références à libstdc ++ (y compris -lstdc ++, -lstdc ++. 6.0.9, libstdc ++. 6.0.9.tbd et libstdc ++. 6.0. 9.dylib). Les dépendances de projet telles que les archives statiques construites avec libstdc ++ devront également être reconstruites avec libc ++. (40885260)

Source: Notes de publication de XCode Beta 2

Note latérale:
Vous devez être connecté pour accéder à la page.
Le lien peut casser dans la prochaine version bêta (les URL changent), mais c'est dans la partie Développeurs/Télécharger

XCode 10 étant officiellement publié avec sa note de version , il reste toujours tel quel:

La compilation avec libstdc ++ était obsolète avec Xcode 8 et n'est pas prise en charge dans Xcode 10 pour cibler iOS . Les projets C++ doivent maintenant migrer vers libc ++ et il est recommandé de définir une cible de déploiement de macOS 10.9 ou version ultérieure, ou iOS 7 ou une version ultérieure. Outre la modification du paramètre de construction de la bibliothèque standard C++, les développeurs doivent également auditer les indicateurs de lieur et les dépendances cibles pour supprimer les références à libstdc ++ (y compris -lstdc ++, -lstdc ++. 6.0.9, libstdc ++. 6.0.9.tbd et libstdc ++. 6.0. 9.dylib). Les dépendances de projet telles que les archives statiques construites avec libstdc ++ devront également être reconstruites avec libc ++. (40885260)

12
Larme

Comme indiqué ci-dessus, lstdc ++ est supprimé de Xcode 10. Pour résoudre ce problème,

  1. Aller à la cible -> BuildPhases -> Link Binary With Libraries

  2. Recherchez lstdc ++ et supprimez-le.

  3. Vous pouvez maintenant avoir une erreur dans certains frameworks qui utilisent la bibliothèque "lstdc ++" mentionnée ci-dessus. Vous devez maintenant mettre à jour ce framework ou le supprimer pour que Xcode puisse le construire correctement.

5
rajtharan-g
  1. Si vous utilisez un Makefile externe pour la construction de bibliothèques C++, ajoutez

CXXFLAGS += -stdlib=libc++ votre bibliothèque externe Makefile et les instances supprimées de -stdlib=stdlibc++

  1. Sinon, ignorez l'étape ci-dessus, allez simplement dans Projet> Cible> Lier le binaire avec des bibliothèques>
    • Supprimer (-) libstdc ++. 6.0.9.tbd
    • Ajouter (+) libc ++. Tbd
4
ir2pid

Cela échouait pour moi lorsque j'essayais de faire un make install. Au lieu de cela, j'ai couru make install -stdlib=libc++, qui a fait l'affaire.

0
user394430