Debugging beim kompilieren

  • Hallo Experten,


    kann mir mal jemand nen Tipp geben, wie ich beim Compilieren mittracen kann, was gerade abgeht, damit ich erkenne, warum bei mir sich ein paar Sachen nicht maken lassen? Also z.B. wenn im Source-Code Header-Dateien eingebunden werden sollen. Oder gibts ein Tool, wo man den Kram mal durchlaufen lassen kann, um fehlerhafte Verweise zu finden.


    Danke!


    Michael

    Hardware: ABIT KT7-RAID, Athlon900, 80GB HDD, 256 MB RAM, DVB-S Rev.1.3, DVD-LW, 40x4 LCD blau inv., Zoltrix Nightingale mit opt. Modul, 10/100/1000 Ethernet, Verax-Lüfter für Netzteil, CPU und Gehäuse


    Gehäuse: Scenic Desktop mit Alu-Verkleidung (geschliffen, natur eloxiert)


    Software: LinVDR 0.6, VDR 1.3.11

  • also bei mir wird beim compilieren ausgegeben, welche datei er gerade verarbeitet.
    und wenn da ein fehler auftritt (z.b. eine header-datei nicht gefunden), dann kann ich das am bildschirm lesen.


    ist dir damit geholfen?


    gruessle

    RavenIV


    ----------------------------------------------------------------------


    LINUX - das längste text-adventure aller zeiten...

  • Leider nein, denn die Header-Dateien sind da und das Configure-Skript meldet auch keine Fehler (geht bei mir um libmpeg2). Beim make bekomme ich aber irgendwann Fehlermeldungen nämlich "undefined references" für mehrere Funktionen, die aus den Header-Dateien der libsdl genommen werden. Ich habe nachgeschaut, und die sind vorhanden und zwar auch in dem Pfad, wo sie sein müssen.
    Also wenn ich im Source-Code eine Zeile

    Code
    #include <SDL/SDL.h>

    habe, dann erwartet er die SDL.h auch unter /usr/include/SDL und dort ist sie. Die SDL.h hat wiederrum eine Zeile

    Code
    #include "SDL_video.h"

    also wird hier die SDL_video.h im lokalen Verzeichnis der SDL.h gesucht und dort ist sie auch, und enthält die angemeckerten Funktionen und Konstanten, z.B:


    Code
    extern DECLSPEC const SDL_VideoInfo * SDL_GetVideoInfo(void);
    
    
    oder
    
    
    extern DECLSPEC SDL_Surface *SDL_SetVideoMode
    (int width, int height, int bpp, Uint32 flags);


    Nu hab ich halt das Problem, dass ich nicht genau weiß, was diese Zeilen genau bedeuten (Funktion?, Variable?, Konstante?)und ob es genau das ist, was benötigt wird oder ob hier noch andere Abhängigkeiten bestehen, denn für ne Funktion ist ja doch recht wenig Fleisch da drin. Was bedeutet "extern"?
    Ich habe über die Suchfunktion ja schon einige mit ähnlichen Problemen gefunden aber meist lags an fehlenden Libraries aber ich bin der Meinung alles zu haben und hier brauch ich doch nur libsdl und die ist da. Da andere ja diese Probleme nicht haben, muss bei mir wohl was fehlen aber finde einfach nicht raus, wo. Vielleicht kann mir ja mal einer der Gentto-User seine USE-Flags schicken. Ich habe kein X, weil keine Grafikkarte.
    Nen Debugger bräuchte ich, um nachvollziehen zu können wie er die Header-Dateien einbindet, ob alles gefunden wird und wann und warum er zu dem Schluss kommt, dass die Verweise auf die Funktionen fehlerhaft sind.

    Hardware: ABIT KT7-RAID, Athlon900, 80GB HDD, 256 MB RAM, DVB-S Rev.1.3, DVD-LW, 40x4 LCD blau inv., Zoltrix Nightingale mit opt. Modul, 10/100/1000 Ethernet, Verax-Lüfter für Netzteil, CPU und Gehäuse


    Gehäuse: Scenic Desktop mit Alu-Verkleidung (geschliffen, natur eloxiert)


    Software: LinVDR 0.6, VDR 1.3.11

  • Hallo,


    ich habe zwar schon lange kein C mehr programmiert, aber vielleicht kann ich Dir ein wenig helfen.


    Also das "undefined references" hat nichts mit den Header-Dateien zu tun. Wenn er eine Header-Datei nicht findet, dann bringt er irgendwas in Richtung "File not found" oder so ähnlich.


    Vielmehr steht die Fehlermeldung dafür, das beim Linken die benötigte Bibliothek nicht gefunden wird. Die Deklaration:

    Code
    extern DECLSPEC const SDL_VideoInfo * SDL_GetVideoInfo(void);


    sagt nämlich nichts anderes, als das die Funktion SDL_GetVideoInfo nicht im lokalen Quellcode vorhanden ist und deshalb irgendwie extern ins Programm, z.B. über eine Lib, eingebunden wird. Diese Zeile macht die Funktion nur im Programm bekannt.


    Du musst also nach der SDL-Lib auf dem System suchen. Vielleicht hast Du evtl. nur das Developement-Paket der SDL, aber nicht die eigentliche Bibliothek installiert?


    BTW: Gibt es libmpeg2 nicht als fertiges Paket für Deine Distribution?


    MfG
    Marco

    Siemens Scenic, DVB-S Rev. 1.6, Airstar 2, 1 TB HD, Allnet ALL0281, AV-Board 1.3, Debian Squeeze

  • Ich glaub es wird Zeit für ne Signatur ;)
    Ich habe Gentoo und da wird grundsätzlich Quellcode genommen, ich habe jetzt nur mal zu Fuß kompiliert, weil ich wissen, wollte wo es hakt. Aber Dein Hinweis ist gut, ich weiß nur nicht, was es neben libsdl sonst noch gibt, irgendwo hab ich gesehen, dass es auch ein sdl-devel Paket geben muss, nur ich kanns nicht finden und im Gentoo ist es nicht in den Abhängikeiten drin. Vielleicht ist es ja genau das was ich brauche.
    Wie krieg ich denn raus, welche Lib er da benötigt?

    Hardware: ABIT KT7-RAID, Athlon900, 80GB HDD, 256 MB RAM, DVB-S Rev.1.3, DVD-LW, 40x4 LCD blau inv., Zoltrix Nightingale mit opt. Modul, 10/100/1000 Ethernet, Verax-Lüfter für Netzteil, CPU und Gehäuse


    Gehäuse: Scenic Desktop mit Alu-Verkleidung (geschliffen, natur eloxiert)


    Software: LinVDR 0.6, VDR 1.3.11

  • hallo,


    also erstmal ist "undefined reference" eine meldung des linkers und nicht des compilers ;) . hilfreich wäre, wenn du mal die genaue fehlermeldung hier posten könntest. dann kann man vielleicht etwas mehr sagen.


    als erstes würde ich mal die versionen prüfen.... sind die versionen der header und der library gleich ? wurde die sdl-library mit dem gleichen compiler übersetzt, wie die libmpeg ?


    bye, michael

    Hardware: AMD Athlon 550, 256MB RAM, FJS Rev.1.6 mit RGB und Digi-out, CI-Modul, Irdeto Allcam 4.7SE, 120GB HD, Realtek 8139, Pinnacle PCTV Sat IR Receiver Seriell
    Software: Suse 8.1, VDR 1.2.1, dvb-20030725, dvd, mp3, image, osd-teletext, stream, vcd

  • Hallo!


    Mit Gentoo kenne ich mich leider gar nicht aus :(


    Das mit dem Developement-Paket war auch nur so eine Idee. Wahrscheinlich ist bei Dir mit libsdl alles installiert. Aus irgendeinem Grund scheint er die Bibliothek beim Linken nicht zu finden.


    Im Makefile müsste beim Linken sowas wie "-lsdl" (vielleicht auch mit Leerzeichen zwischen l und s) stehen. Mit dieser Option wird das Programm gegen die SDL gelinkt.


    Hast Du schonmal nach der Bibliothek selbst gesucht?


    Code
    find / -name "libsdl*"


    Vielleicht liegt sie bei Dir nicht in einem der Verzeichnisse, wo der Linker automatisch danach sucht. Sollte das der Fall sein, kannst Du ihm das beim Linken über die Option "-L" mitteilen.


    Frag' doch mal im Gentoo-Forum, die können Dir da eher weiterhelfen.


    MfG
    Marco

    Siemens Scenic, DVB-S Rev. 1.6, Airstar 2, 1 TB HD, Allnet ALL0281, AV-Board 1.3, Debian Squeeze

  • Moin!


    SIM_Blackblade
    hier sind die Fehlermeldungen beim kompilieren von libmovtar. Bin zwar grad mit libmpeg2 dran aber die Meldungen sind im Prinzip ähnlich, es werden ungefähr die gleichen Funktionen nicht gefunden.



    Ich habe mal die libsdl wieder deinstalliert und aufgepasst, dass alle libs und header gelöscht sind. Neuinstalliert und gleicher Fehler.
    Ich habe auch für das gesamte System den gleichen gcc genommen.


    killernase
    ich habe mir die Makefiles angeschaut, da ist jeweils eine Zeile drin mit -lSDL und davor ein Hinweis auf den Pfad nach /usr/lib (-L/usr/lib?). Ich hätte mal die Zeile kopieren sollen ich weiß, bin jetzt im Büro.
    Unter /usr/lib gibts auch mehrere Dateien, u.a. libSDL.a und libSDL.so.


    Dank Eurer Hilfe :tup versteh ich ja jetzt schon einige Zusammenhänge und hab mich mit dem ld beschäftigt und -lSDL heißt ja dann, dass er unter /usr/lib nach libSDL.so und libSDL.a sucht. Die Shared Library wird wohl bevorzugt genommen.
    Ein Kollege gab mir jetzt den Tipp, mal mit strings die Libraries nach den Funktionen zu durchsuchen. Das werd ich heute Abend mal machen.


    Ich denke mal nicht, dass das Problem Gentoo-spezifisch ist, denn ich hab die Pakete auch schonmal zu Fuss ohne emerge versucht zu installieren und da gings auch nicht.

    Hardware: ABIT KT7-RAID, Athlon900, 80GB HDD, 256 MB RAM, DVB-S Rev.1.3, DVD-LW, 40x4 LCD blau inv., Zoltrix Nightingale mit opt. Modul, 10/100/1000 Ethernet, Verax-Lüfter für Netzteil, CPU und Gehäuse


    Gehäuse: Scenic Desktop mit Alu-Verkleidung (geschliffen, natur eloxiert)


    Software: LinVDR 0.6, VDR 1.3.11

    Einmal editiert, zuletzt von jobaka ()

  • So nu bin ich ne Ecke weiter, der strings-Befehl zeigt mir, dass keine der Libs die gesuchten Funktionen enthält, ein grep auf "video" bringt folgende Ausgabe:

    Code
    SDL not built with video support


    Also muss mir wohl was entscheidendes beim bauen der libsdl fehlen, nur was?
    Ich hoffe, es ist nicht grad X, denn das will ich hier auf keinen Fall draufhaben müssen, macht ja ohne GraKa auch keinen Sinn.


    Aber vielleicht kennt sich ja wer mit der libsdl dahingehend gut aus, vielleicht ja ein Gentoo-User,der weiß, welche USE-Flags ich brauche

    Hardware: ABIT KT7-RAID, Athlon900, 80GB HDD, 256 MB RAM, DVB-S Rev.1.3, DVD-LW, 40x4 LCD blau inv., Zoltrix Nightingale mit opt. Modul, 10/100/1000 Ethernet, Verax-Lüfter für Netzteil, CPU und Gehäuse


    Gehäuse: Scenic Desktop mit Alu-Verkleidung (geschliffen, natur eloxiert)


    Software: LinVDR 0.6, VDR 1.3.11

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!