C ++ Code mit 'gcc' verknüpfen (ohne g ++)

Hallo zusammen, kurze Frage: Ich befinde mich in einer Situation, in der es nützlich wäre, meine ausführbare C ++ - Datei nur mit 'gcc' (ohne g ++) zu generieren. Der Grund dafür ist, dass ich den Code an einen automatischen Übermittlungsserver senden muss, der den Befehl 'g ++' (oder 'c ++') nicht erkennt.

In meinen Experimenten bin ich dabeiKompilieren gcc funktioniert gut. Das Problem ist, wenn ich versuche, die generierten Objektdateien zu verknüpfen, wird es durcheinander gebracht. Nun, basierend auf dem, was ich von der gcc-Manpage verstanden habe (ich kann weit davon entfernt sein, also sag mir, ob ich es bin), ist g ++ im Grunde gcc, aber es verknüpft die C ++ - Bibliothek.

Wenn dies zutrifft, wie kann ich (wenn möglich) die C ++ - Bibliothek explizit verknüpfenohne Verwenden Sie den Befehl g ++ (oder c ++)?

BEARBEITEN: Ich füge das Makefile hinzu, um das Problem besser zu veranschaulichen:

<code>COMPILER = gcc
CFLAGS = -Wall -g -x c++

# MODULE COMPILATION
model: modules/model.h modules/sources/model.cpp
    $(COMPILER) $(CFLAGS) -c modules/sources/model.cpp -o obj/model.o

algorithms: modules/algorithms.h modules/sources/algorithms.cpp
    $(COMPILER) $(CFLAGS) -c modules/sources/algorithms.cpp -o obj/algorithms.o

io: modules/io.h modules/sources/io.cpp
    $(COMPILER) $(CFLAGS) -c modules/sources/io.cpp -o obj/io.o

stopwatch: modules/stopwatch.h modules/sources/stopwatch.cpp
    $(COMPILER) $(CFLAGS) -c modules/sources/stopwatch.cpp -o obj/stopwatch.o

# EXECUTABLE GENERATION
exe: model algorithms io stopwatch
    $(COMPILER) $(CFLAGS) main.cpp obj/model.o obj/algorithms.o obj/io.o obj/stopwatch.o -o bin/process

# DEFAULT TEST CASE
run: exe
    ./bin/process -i data/nasa_small.log -a data/nasa_small.access -s data/nasa_small.stack

# CLEANING ROUTINE
clean:
    rm -f obj/*
</code>
 Martin York16. Juni 2009, 19:23
gcc und g ++ verweisen buchstäblich auf dieselbe ausführbare Datei. Der einzige Unterschied besteht darin, dass die Flags an das Back-End übergeben werden.
 Rafael Almeida16. Sept. 2012, 17:26
War keine Option = D
 Keith Thompson16. Sept. 2012, 01:51
Korrigieren Sie den Server für die automatische Übermittlung!

Antworten auf die Frage(2)

Lösung für das Problem

Sie können die Standard-C ++ - Bibliothek mit der verknüpfen-l flag to gcc:

<code>gcc cplusplus.o -lstdc++ -o myexe
</code>
 mgiuca27. Dez. 2011, 02:46
Ich benutze diese Technik seit Jahren erfolgreich. Aber ich habe gerade ein Upgrade auf Ubuntu 11.10 (gcc 4.6.1) durchgeführt und es funktioniert nicht mehr. Ich erhalte jetzt auf mehreren Rechnern den Fehler "undefinierter Verweis auf" operator new (unsigned long ")". Ist dieses Problem bei jemand anderem aufgetreten?
 Raffi Khatchadourian26. Feb. 2013, 04:01
Verknüpft dieser Link mit einer dynamischen Bibliothek oder einer statischen Bibliothek? Ich habe festgestellt, dass sich auf meinem System sowohl .so- als auch .a-Dateien für stdc ++ befinden.
 mgiuca27. Dez. 2011, 02:54
Vergiss es. Das liegt daran, dass ich -lstdc ++ vor die o-Datei gestellt habe. Neuere Versionen von GCC scheinen zu erfordern, dass Sie Bibliotheken nach den o-Dateien einfügen.
 Rafael Almeida16. Juni 2009, 15:49
Das funktioniert super, ich kannte den Namen der Bibliothek nicht, um es zu verlinken.

-v" ausführen, wird angezeigt, welcher Befehl und welche Optionen verwendet werden. Sie sollten in der Lage sein, von dort die richtige gcc-Befehlszeile abzuleiten.

 Rafael Almeida16. Juni 2009, 15:50
Auch eine tolle Lösung!

Ihre Antwort auf die Frage