undefined reference ...



  • Hallo,

    ich bekomme es einfach nicht hin, eine Funktion aufzurufen, die in einer anderen Datei untergebracht ist. Immer gibt es die Fehlermdeldung: in 'main': undefined reference to 'show_name'. Wahrscheinlich ist es nur eine kleine Macke, aber meine Anfängerlogik reicht nicht aus, sie zu entdecken. Hier die einzelnen Dateien, auf ein Minimum zusammengestrichen:

    // -------- adr.h --------------
    #include <stdio.h>
    #define name "Hallo, ich bin es"
    void show_name ();
    
    // -------- adr.c --------------
    #include "adr.h"
    
    void show_name () {
      printf ("\n"name"\n");
    }
    
    // -------- main.c -------------
    #include "adr.h"
    
    int main () {
      show_name ();
    }
    

    Compiliert habe ich das Ganze mit

    gcc -o adresse main.c
    

    oder auch hübsch der Reihe nach mit

    gcc -c adr.c
    gcc -c main.c
    gcc -o adresse main.c
    

    Übrigens: Wenn ich die Printanweisung aus show_name direkt in main aufrufe und den Funktionsaufruf auskommentiere, klappt die Sache; der Header wird also richtig eingebunden. Kann mir jemand auf die Sprünge helfen?

    Gruß
    erin



  • gcc -c adresse.c
    gcc -c main.c

    gcc -o adresse.o main.o



  • gcc adr.c main.c -o main -Wall -pedantic
    

    -Wall und -pedantic erhöhen den Warnlevel. Das brauchst nicht zum kompilieren, hilft dir aber schöneren Code zu schreiben. Steht im übrigen auch alles in der manpage vom gcc 😉



  • Jawoll, das funktioniert. Danke. Ich hab' sofort versucht, eure Compiler-Hinweise in ein kleines Makefile zu packen, um zu sehen, wie das funktioniert:

    programm : main.o adr.o	
    	gcc -o programm adr.o main.o 
    
    main.o : main.c 
    	gcc -c main.c 
    
    adr.o : adr.c 
    	gcc -c adr.c
    

    Offensichtlich läuft auch dieses, aber ich habe noch eine Verständnisfrage: Die Header (es werden demnächst etliche sein) werden ja nicht mitcompiliert, aber sie sollten auch von make auf Aktualität überprüft werden. Wo im Makefile müssen sie eingetragen werden?

    Am Rande: Die Feinarbeiten im Makefile, was Variablen und Warnhinweise betrifft, kommen noch. 😉

    Gruß
    erin



  • Am Rande: Die GNU Autotolls können dir viel Arbeit abnehmen. Guter Artikel: http://www.c-plusplus.net/forum/viewtopic-var-t-is-164415.html


Anmelden zum Antworten