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