Heim > Artikel > Backend-Entwicklung > Warum kann Clang mit libc im C 0x-Modus keine Boost::program_options-Beispiele verknüpfen?
Hintergrund:
Beim Versuch, ein Boost::program_options-Beispiel mit Clang im C 0x-Modus mit libc zu kompilieren und zu verknüpfen, tritt der folgende Fehler auf:
Undefined symbols for architecture x86_64: // Various undefined symbols related to Boost::program_options
Erklärung:
Der Hauptgrund für diesen Fehler ist, dass libc nicht binärkompatibel mit libstdc von GCC ist. Konkret:
Lösung:
Um dieses Problem zu beheben, müssen Sie Boost mit Clang mit libc als Standardbibliothek neu erstellen:
clang++ -stdlib=libc++ ...
Grund für Binärinkompatibilität:
Um versehentliches Mischen und Laufzeitabstürze aufgrund von Binärinkompatibilität zu verhindern, nutzt libc die Inline-Namespace-Funktion von C 11, um die ABI (Application Binary Interface) von zu ändern std::string unter Beibehaltung derselben API (Application Programming Interface). Dadurch wird sichergestellt, dass der Linker zwischen std::string von libstdc und std::string von libc unterscheiden kann.
Das obige ist der detaillierte Inhalt vonWarum kann Clang mit libc im C 0x-Modus keine Boost::program_options-Beispiele verknüpfen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!