Header erstellen, Fragen



  • Servus Leute,

    Ich habe ein paar grundsätzliche Fragen zu Headern.

    Die Standardsyntax zur Erstellung eines eigenen Headers ist

    #ifndef MYHEADER_H
    #define MYHEADER_H
    
    int meineFunktion1(int);
    int meineFunktion2(char);
    
    #endif /* MYHEADER_H */
    

    .
    Das nächste was ansteht ist die Erstellung des dazugehörigen Quelltextes für die Funktionen im Header.

    #include "myheader.h"
    
    int meineFunktion1 (int i)
    {
      ...
    }
    
    int meineFunktion2 (char c)
    {
      ...
    }
    

    Als nächstes muss die .c-Datei kompiliert werden.
    Ist alles an sich kein Problem. Doch was muss ich mit der Objektdatei, der Header- und der zugehörigen .c-Datei machen? Müssen die in bestimmte Ordner schoben werden, damit ich en Header problemlos einbinden kann?

    Letzte Frage. Was mache ich, wenn ich einen Header in Header einbinden will? Worauf muss man da achten, damit alles läuft?

    Vielen Dank,

    Inge



  • Die Objektdatei wird später einfach zum Projekt dazugelinkt. Das heißt du musst dem Compiler sagen, dass er sie hinzufügen soll. Beim GCC z.B. so: gcc test.c datei1.o -o projektname
    test.c muss den Header ebenfalls einbinden um die Funktionen aus der anderen Datei nutzen zu können. Wenn die Headerdatei in einem anderen Verzeichnis als dem aktuellen liegt musst du dem Compiler noch sagen wo er sie findet (zusätzlich muss der Name der Headerdatei in test.c in spitze Klammern geschreiben werden, also: #include <Datei1.h> ). Beim GCC gibt es dafür den Parameter -I . Dahinter schreibst du dann einfach den Verzeichnisnamen.
    Ich hoffe es war ausführlich genug.
    Grüsse
    player4245



  • Dankeschön,

    das ist sehr präzise. Nun habe ich die test.c für test.h geschrieben. Ich will die Datei kompilieren um test.o zu erhalten. Er gibt mir folgendes aus:

    /usr/lib/gcc/i586-suse-linux/4.4/../../../crt1.o: In function `_start':
    /usr/src/packages/BUILD/glibc-2.10.1/csu/../sysdeps/i386/elf/start.S:115: undefined reference to `main'
    collect2: ld returned 1 exit status
    

    kompiliert habe ich ganz normal mit:

    gcc -lheader1 -lheader2 -lheader3 test.c -o test
    

    Muss ich noch etwas beachten?



  • Hab ich ganz vergessen 🙂 . Wenn du lediglich eine Objektdatei haben willst, musst du zusätzlich den Parameter -c mit angeben. Dieser sorgt dafür das nichts gelinkt wird (denn der Linker braucht einen Programmeinstiegspunkt in diesem Fall eine Funktion main). Und der Schalter -l ist für Bibliotheken. Dort kannst und musst du keine Headerdateien angeben.



  • Ahh jetzt funzts,

    Danke Danke!!


Anmelden zum Antworten