Verknüpfen von C ++ Code mit 'gcc' (ohne g ++)
Frage
Hallo alle: kurze Frage: Ich bin in einer Situation, wo es nützlich wäre, meine C ++ ausführbaren Datei zu erzeugen, nur ‚gcc‘ mit (ohne g ++). Grund dafür ist, dass ich den Code an einen automatischen Übermittlung Server einreichen, die nicht die erkennt ‚g ++‘ (oder ‚c ++‘, was das betrifft) Befehl.
Bei meinen Versuchen, während ich bin Kompilieren gcc gut funktioniert. Das Problem ist, wenn ich versuche, die generierten Objektdateien zu verknüpfen wird es vermasselt. Nun, auf dem, was ich von der gcc Manpage verstehen (ich kann weg sein, so mir sagen, ob ich bin), g ++ ist im Grunde gcc, aber es verbindet die C ++ Bibliothek.
Wenn das wahr ist, wie kann ich (wenn möglich) verknüpfen explizit die C ++ Bibliothek ohne mit dem g ++ (oder C ++) Befehl?
EDIT: Ich bin die Make-Datei hinzugefügt, das Problem besser zu veranschaulichen:
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/*
Lösung
Sie können die Standard-C-Verbindung ++ Bibliothek mit dem -l
Flag auf gcc:
gcc cplusplus.o -lstdc++ -o myexe
Andere Tipps
Wenn Sie laufen g ++ mit der Option „-v“, wird es zeigen, was Befehl und Optionen es verwendet. Sie sollten die richtige gcc Kommandozeile von dort abzuleiten können.