Heim  >  Artikel  >  Backend-Entwicklung  >  Warum kann Clang mit libc im C 0x-Modus Boost::Program_Options nicht verknüpfen?

Warum kann Clang mit libc im C 0x-Modus Boost::Program_Options nicht verknüpfen?

Barbara Streisand
Barbara StreisandOriginal
2024-11-03 01:46:03869Durchsuche

Why Does Clang with libc   in C  0x Mode Fail to Link Boost::Program_Options?

Warum Clang mit libc im C 0x-Modus nicht verknüpft werden kann Boost::Program_Options-Beispiel

Das angegebene Snippet zeigt ein Problem beim Kompilierungsversuch und verknüpfen Sie boost::program_options mit clang unter Verwendung von libc in C 0x Modus.

Problemanalyse

Der Kompilierungsfehler ist auf die Inkompatibilität zwischen libc und libstdc zurückzuführen, der von g implementierten Standardstandardbibliothek. libc verwendet unterschiedliche Implementierungsdetails für std::string und führt einen ABI-Unterschied (Application Binary Interface) von libstdc ein.

Lösung

Um dieses Problem zu beheben, ist es notwendig um Boost mithilfe von clang mit der Flagge -stdlib=libc neu zu erstellen. Dadurch wird sichergestellt, dass die Boost-Bibliotheken mit derselben Standardbibliothek kompiliert werden, mit der die ausführbare Datei verknüpft wird. Es harmonisiert die ABI von std::string über die Boost-Bibliotheken und das zu kompilierende Programm hinweg.

Technische Erklärung

libc nutzt Inline-Namespaces, um die ABI von std zu ändern: :string, ohne seine API zu ändern. Dadurch entsteht eine wahrgenommene Diskrepanz zwischen den beiden Bibliotheken, wobei std::string von libstdc und std::__1::string von libc vom Linker als unterschiedliche Datenstrukturen behandelt werden.

Durch Neuaufbau von Boost mit dem entsprechenden Standard In der Bibliothek stimmen die Symboldefinitionen für boost::program_options mit denen überein, die vom Linker erwartet werden, was eine erfolgreiche Verknüpfung ermöglicht.

Das obige ist der detaillierte Inhalt vonWarum kann Clang mit libc im C 0x-Modus Boost::Program_Options 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