Maison > développement back-end > C++ > Pourquoi Clang avec libc en mode C 0x ne parvient-il pas à lier les exemples Boost::program_options ?

Pourquoi Clang avec libc en mode C 0x ne parvient-il pas à lier les exemples Boost::program_options ?

DDD
Libérer: 2024-11-02 15:21:30
original
820 Les gens l'ont consulté

Why does Clang with libc   in C  0x mode fail to link Boost::program_options examples?

Pourquoi ne peut-on pas cliquer avec la libc en mode c 0x pour lier cet exemple boost::program_options ?

Contexte :

Lorsque vous tentez de compiler et de lier un exemple Boost::program_options à l'aide de Clang en mode C 0x avec libc , l'erreur suivante se produit :

Undefined symbols for architecture x86_64:
  // Various undefined symbols related to Boost::program_options
Copier après la connexion

Explication :

La principale raison de cette erreur est que la libc n'est pas compatible binaire avec libstdc de GCC. Plus précisément :

  • Dans libstdc , std::string est compté par références.
  • Dans libc , std::string utilise "l'optimisation de chaîne courte" (SSO), qui a une mémoire différente disposition et comportement.

Solution :

Pour résoudre ce problème, vous devez reconstruire Boost en utilisant Clang avec libc comme bibliothèque standard :

clang++ -stdlib=libc++ ...
Copier après la connexion

Raison de l'incompatibilité binaire :

Pour éviter les mélanges accidentels et les plantages d'exécution dus à une incompatibilité binaire, la libc exploite la fonctionnalité d'espace de noms en ligne de C 11 pour modifier l'ABI (Application Binary Interface) de std::string tout en conservant la même API (Application Programming Interface). Cela garantit que l'éditeur de liens peut faire la différence entre std::string de libstdc et std::string de libc .

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal