Heim > Artikel > Backend-Entwicklung > Warum kann Clang mit libc im C 0x-Modus dieses boost::program_options-Beispiel nicht verknüpfen?
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 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.
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!