Maison  >  Article  >  développement back-end  >  Pourquoi Clang avec la libc en mode c 0x ne parvient-il pas à lier cet exemple boost::program_options ?

Pourquoi Clang avec la libc en mode c 0x ne parvient-il pas à lier cet exemple boost::program_options ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-03 13:43:30305parcourir

Why does clang with libc   in c  0x mode fail to link this boost::program_options example?

Pourquoi clang avec libc en mode c 0x ne lie-t-il pas cet exemple boost::program_options ?

Compilation d'un exemple de programme impliquant boost::program_options avec clang en utilisant libc et le mode c 0x entraîne des erreurs de symboles non définies. Cependant, le même code se compile et se lie avec succès en utilisant g -mp-4.7 ou clang sans libc .

Le problème

Le problème vient de l'incompatibilité de boost::program_options, qui est construit en utilisant libstdc , avec libc . Afin d'éviter un mélange accidentel de bibliothèques standards incompatibles et d'assurer la compatibilité binaire, la libc utilise une fonctionnalité C 11 appelée « espace de noms en ligne ». Cela modifie l'interface binaire d'application (ABI) de std::string sans affecter son interface de programmation d'application (API).

La solution

Pour résoudre ce problème de compatibilité, reconstruisez boost en utilisant clang avec le -stdlib=libc flag :

clang++ -stdlib=libc++

Cette action reconstruira boost avec la libc et évitera les conflits de symboles résultant de l'utilisation de bibliothèques standard incompatibles.

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