Irgendein Unterschied in der Verknüpfung mit gcc vs. g ++?

8

Gibt es Unterschiede im Verbindungsprozess zwischen gcc und g ++?

Ich habe ein großes C-Projekt und habe einen Teil des Codes in C ++ umgewandelt. Der Code verwendet noch nicht die std C ++ - Bibliothek, daher wird -llibstdc++ momentan nicht benötigt.

    
Let_Me_Be 18.07.2011, 15:23
quelle

3 Antworten

8

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.

    
Mark B 18.07.2011, 15:26
quelle
0

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 -###

interessiert sein     
Chris Dodd 18.07.2011 18:49
quelle
-2

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).

Bearbeiten:

Es sollte funktionieren, wenn Sie

haben %Vor%

in Ihrem Code und die Objektdatei wurde mit g++ -c kompiliert. Aber ich wette nicht darauf.

    
M'vy 18.07.2011 15:30
quelle

Tags und Links