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 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).
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!