Der Hauptunterschied besteht darin, dass (unter der Annahme, dass die Dateien als C ++ erkannt werden) g ++ die Flags einrichtet, die für die Verknüpfung mit der C ++ - Standardbibliothek benötigt werden. Es kann auch die Ausnahmebehandlung einrichten. Ich würde mich nicht auf die Tatsache verlassen, dass Ihre Anwendung nicht die Standardbibliothek verwendet, die nicht benötigt wird, wenn sie als C ++ kompiliert wird (zum Beispiel der Standardausnahmebehandler).
BEARBEITEN: Wie in den Kommentaren erwähnt, haben Sie Probleme mit allen Konstruktoren (die funktionieren) für statische Objekte sowie keine Tabellen mit virtuellen Funktionen (wenn Sie also diese Funktionen von C ++ verwenden, müssen Sie noch verlinken diese Bibliothek).
EDIT2: Wenn Sie nicht C99-spezifischen Code in Ihrem C-Projekt verwenden, würde ich eigentlich nur zum Kompilieren der ganzen Sache als C ++ als ersten Schritt in Ihrem Migrationsprozess wechseln.
gcc
und g++
sind beide nur Treiberprogramme, die nichts anderes tun, als andere Programme aufzurufen. Sie können also die Option -v
verwenden, um genau zu sehen, was sie tun - welche anderen Programme sie aufrufen was argt. So können Sie genau sehen, was der Unterschied zwischen der Verknüpfung mit gcc
und g++
für die spezifische Version und Architektur von gcc ist, die Sie installiert haben. Sie können sich jedoch nicht auf dasselbe verlassen, wenn Sie Portabilität wünschen.
Je nachdem, was Sie tun, könnten Sie auch am Argument -###
Ich denke, dass der g ++ Linker nach den verfälschten Funktionsnamen der CPP suchen wird und sich von den C unterscheidet. Ich bin mir nicht sicher, ob gcc damit klarkommt. (Vorausgesetzt, Sie können explizit die C-Version anstelle von C ++ verwenden).
Es sollte funktionieren, wenn Sie
haben %Vor% in Ihrem Code und die Objektdatei wurde mit g++ -c
kompiliert. Aber ich wette nicht darauf.