Probleme bei header include mit GCC
-
Hallo,
ich habe folgendes Dateien, die ich kompilieren möchte:
"C:\djgpp\bin\gcc.exe" -include f1.h -c f1.cpp -o f1.o
"C:\djgpp\bin\gcc.exe" -c main.cpp -o main.o
"C:\djgpp\bin\ld.exe" -T main.ld main.o f1.o -o main.bin --verboseJedoch kann er die in f1.h deklarierte Klasse in main.cpp nicht linken und gibt dadurch jede Menge linker Fehler aus ...
Wie genau muss ich da vorgehen? Ich arbeite sonst immer mit dem VS2008 und bin daher solche Probleme nicht gewöhnt
-
Schon mal den gcc zum Linken verwendet?
-
knivil schrieb:
Schon mal den gcc zum Linken verwendet?
mmmh okay, konntest du nicht wissen: Aber ich habe eine Binär-Datei mit Einstiegspunkten die ich linken muss, daher muss ich das Linken schon selbst übernehmen.
Mir würde schon reichen, wenn man mir mal sagen könnte wie man so etwas grundsätzlich mit gcc kompiliert. Also Header+CPP Datei die in einer main.cpp eingebunden wird und eine KLASSE enthält die darin verwendet wird.
-
Okay, das ganze sieht nun so aus:
"C:\djgpp\bin\gcc.exe" -c f1.cpp -o f1.o "C:\djgpp\bin\gcc.exe" -include f1.cpp -c main.cpp -o main.o "C:\djgpp\bin\ld.exe" -T main.ld main.o f1.o -o main.bin --verbose
Er findet jetzt zwar meine Klasse und die Funktionen; ich erhalte aber weiterhin folgende Linker-Fehler in main:
undefined reference to __Unwind_Resume undefined reference to __ZdlPv undefined reference to __ZTVN10__cxxabiv117__class_type_infoE undefined reference to __gxx_personality_v0
Was muss ich noch einbinden?
-
Versuch's bitte mit folgenden Flags zu kompilieren:
CXXFLAGS += -nostartfiles CXXFLAGS += -nodefaultlibs CXXFLAGS += -nostdlib CXXFLAGS += -nostdinc CXXFLAGS += -nostdinc++ CXXFLAGS += -fno-builtin CXXFLAGS += -fno-stack-protector CXXFLAGS += -fno-rtti CXXFLAGS += -fno-access-control CXXFLAGS += -fno-enforce-eh-specs CXXFLAGS += -fno-nonansi-builtins CXXFLAGS += -fno-use-cxa-get-exception-ptr CXXFLAGS += -fno-gnu-keywords CXXFLAGS += -fno-builtin CXXFLAGS += -fno-common CXXFLAGS += -fno-exceptions CXXFLAGS += -fno-non-call-exceptions CXXFLAGS += -static
Weiss nicht genau, ob sie wirklich was bringen - ich benutze sie für meine c++ Testapplikation, die ich mit GRUB boote und glaube, hatte ähnliche Linker Probleme.
Vielleicht noch ein Tipp: Es gibt in den binutils die Programme nm und c++filt. Mit nm kann man in die Objektdateien reinschauen, mit c++filt lesbare Symbole anzeigen lassen...