Ich verstehe, dass C ++ - Compiler nicht miteinander kompatibel sind. Allerdings konnte ich zu diesem Thema insbesondere für C nichts finden. Ich weiß, dass der C-Standard den Compilern viel Raum lässt, um Dinge zu implementieren, wie sie es für richtig halten: Beispielsweise ist die Größe und Ausrichtung der meisten (alle?) Datentypen implementierungsdefiniert, abgesehen von einigen minimalen Garantien. Daher können zwei Compiler (oder zwei Versionen desselben Compilers) in zahlreichen Details nicht übereinstimmen.
Habe ich Recht, wenn ich denke, dass es keine Garantie dafür gibt, dass zwei mit verschiedenen Compilern kompilierte Objektdateien tatsächlich richtig verknüpft werden? Beispielsweise könnte die Größe von Zeigern in einer Objektdatei 32 Bit und in der anderen 64 Bit betragen. Aber wenn ja, warum werden C-Bibliotheken manchmal in vorkompilierter Form verteilt? Gibt es eine Erwartung, dass ich denselben Compiler verwenden werde (z. B. gcc), oder einen De-facto- Standard, der verwendet wird, um die Binärkompatibilität sicherzustellen? Und wie stellen andere Sprachen mit einer Fremdsprachenschnittstelle sicher, dass die Dinge beim Verknüpfen mit C-Objektdateien richtig ausgerichtet sind?