Heim  >  Artikel  >  Backend-Entwicklung  >  Warum kann Clang mit libc im C 0x-Modus dieses boost::program_options-Beispiel nicht verknüpfen?

Warum kann Clang mit libc im C 0x-Modus dieses boost::program_options-Beispiel nicht verknüpfen?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-03 13:43:30306Durchsuche

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

Warum verlinkt clang mit libc im c 0x-Modus dieses boost::program_options-Beispiel nicht?

Kompilieren eines Beispielprogramms mit boost::program_options mit clang unter Verwendung von libc und der c 0x-Modus führt zu undefinierten Symbolfehlern. Derselbe Code lässt sich jedoch erfolgreich mit g -mp-4.7 oder clang ohne libc kompilieren und verknüpfen.

Das Problem

Das Problem ergibt sich aus der Inkompatibilität von boost::program_options, das mit erstellt wurde libstdc , mit libc . Um eine versehentliche Vermischung inkompatibler Standardbibliotheken zu vermeiden und die Binärkompatibilität sicherzustellen, verwendet libc eine C 11-Funktion namens „Inline-Namespace“. Dadurch wird die Application Binary Interface (ABI) von std::string geändert, ohne dass sich dies auf die Application Programming Interface (API) auswirkt.

Die Lösung

Um dieses Kompatibilitätsproblem zu beheben, erstellen Sie Boost mithilfe von clang mit dem neu -stdlib=libc-Flag:

clang++ -stdlib=libc++

Diese Aktion erstellt Boost mit libc neu und vermeidet Symbolkonflikte, die durch die Verwendung inkompatibler Standardbibliotheken entstehen.

Das obige ist der detaillierte Inhalt vonWarum kann Clang mit libc im C 0x-Modus dieses boost::program_options-Beispiel nicht verknüpfen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn