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

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


Anmelden zum Antworten