Maison > développement back-end > C++ > le corps du texte

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

Barbara Streisand
Libérer: 2024-11-03 01:46:03
original
869 Les gens l'ont consulté

Why Does Clang with libc   in C  0x Mode Fail to Link Boost::Program_Options?

Pourquoi clang avec la libc en mode C 0x ne parvient pas à lier Boost::Program_Options Exemple

L'extrait donné démontre un problème lors de la tentative de compilation et link boost::program_options avec clang utilisant la libc en mode C 0x.

Analyse du problème

L'erreur de compilation provient de l'incompatibilité entre libc et libstdc , la norme par défaut bibliothèque implémentée par g . libc utilise différents détails d'implémentation pour std::string, introduisant une différence ABI (Application Binary Interface) par rapport à libstdc .

Solution

Pour résoudre ce problème, il est nécessaire pour reconstruire Boost en utilisant clang avec l'indicateur -stdlib=libc. Cela garantit que les bibliothèques Boost sont compilées avec la même bibliothèque standard à laquelle l'exécutable est lié. Il harmonise l'ABI de std::string dans les bibliothèques Boost et le programme en cours de compilation.

Explication technique

libc exploite les espaces de noms en ligne pour modifier l'ABI de std : :string sans modifier son API. Cela crée une divergence perçue entre les deux bibliothèques, où std::string de libstdc et std::__1::string de libc sont traités comme des structures de données distinctes par l'éditeur de liens.

En reconstruisant Boost avec le standard approprié bibliothèque, les définitions de symboles pour boost::program_options correspondent à celles attendues par l'éditeur de liens, permettant une liaison réussie.

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!

source:php.cn
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal