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
Explication :
La principale raison de cette erreur est que la libc n'est pas compatible binaire avec libstdc de GCC. Plus précisément :
Solution :
Pour résoudre ce problème, vous devez reconstruire Boost en utilisant Clang avec libc comme bibliothèque standard :
clang++ -stdlib=libc++ ...
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!