Heim >Backend-Entwicklung >C++ >Können C 11-, C 14- und C 17-Objekte sicher miteinander verbunden werden?

Können C 11-, C 14- und C 17-Objekte sicher miteinander verbunden werden?

Linda Hamilton
Linda HamiltonOriginal
2024-12-04 08:07:17703Durchsuche

Can C  11, C  14, and C  17 Objects Be Safely Linked Together?

Verknüpfen von C 17/14/11-Objekten

Angenommen, Sie haben mehrere kompilierte Objekte vom selben Compiler/der gleichen Version: eines wurde mit C 11 kompiliert , ein weiterer mit C 14 und ein dritter mit C 17. Angenommen, alle Header verwenden C 11-Konstrukte und es gibt keine Abhängigkeiten, welche Kombinationen dieser Objekte können sicher in einer einzigen Binärdatei verknüpft werden?

GCC

Für GCC ist die Verknüpfung einer beliebigen Kombination dieser Objekte sicher. Die Standardversion (Option -std) hat keinen Einfluss auf die ABI-Kompatibilität, da die Implementierung diese Eigenschaft gewährleistet.

Es treten jedoch Probleme auf, wenn Objekte verknüpft werden, die mit verschiedenen GCC-Versionen kompiliert wurden, und instabile Funktionen eines neueren C-Standards vor dem verwendet werden Die Compilerunterstützung ist abgeschlossen. Daher wird das Verknüpfen von Objekten, die mit GCC-Versionen 4.9 und 5 mit -std=c 11 oder GCC-Versionen 7 und 8 mit -std=c 17 kompiliert wurden, Probleme verursachen.

Weitere Überlegungen

  • Die gemeinsam genutzte Bibliothek libstdc .so sollte aus einer Version von GCC stammen, die der verwendeten Version entspricht oder höher ist um beliebige Objekte zu kompilieren.
  • Die String-Implementierung muss über alle Objekte hinweg konsistent sein. Kompilieren Sie mit -D_GLIBCXX_USE_CXX11_ABI=0 oder 1, um die gcc4-kompatible bzw. neue cxx11-Implementierung auszuwählen.

Das obige ist der detaillierte Inhalt vonKönnen C 11-, C 14- und C 17-Objekte sicher miteinander verbunden werden?. 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