C-Programmierung: gcc kann nicht lesen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
SchroedingersKatze
Beiträge: 5
Registriert: 16.10.2011 13:27:26

C-Programmierung: gcc kann nicht lesen

Beitrag von SchroedingersKatze » 01.07.2014 15:19:41

Moin moin,

ich habe in einer einzigen Datei einige Funktionsdeklarationen untergebracht, einige Funktionen ausprogrammiert und will sie in der main-Funktion aufrufen.

Siehe http://nopaste.debianforum.de/37869

Beim Kompilieren mittels

Code: Alles auswählen

gcc -ggdb3 -o llist main.c
erhalte ich folgende Fehlermeldung, die ich mir nicht erklären kann:

Code: Alles auswählen

/tmp/cci3yleU.o: In function `main':
/home/tdu/svn/Projekte/verkettete_liste/main.c:129: undefined reference to `printList'
/home/tdu/svn/Projekte/verkettete_liste/main.c:135: undefined reference to `appendNode'
/home/tdu/svn/Projekte/verkettete_liste/main.c:139: undefined reference to `printList'
collect2: error: ld returned 1 exit status
Benutzte Compilerversion:

Code: Alles auswählen

gcc (Debian 4.7.2-5) 4.7.2
Was übersehe ich? Warum lassen sich newList und newNode referenzieren, aber nicht z.B. appendNode?

mfg
Schrödingers Katze

Benutzeravatar
peschmae
Beiträge: 4844
Registriert: 07.01.2003 12:50:33
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: nirgendwo im irgendwo

Re: C-Programmierung: gcc kann nicht lesen

Beitrag von peschmae » 01.07.2014 15:29:52

Per default versucht gcc eine Ausführbare Datei zu erstellen; dazu wird der Code zuerst kompiliert (das funktioniert bestens mit deinen Forward-Declarations) und anschliessend gelinkt. Das linken schlägt fehl, weil du keine Implementierung für die Funktionen (printList, appendNode) hast.

Der übliche Weg ist es, jede .c Datei einzeln zu kompilieren gcc -c main.c, ditto für die Datei mit den weiteren Funktionsdefinitionen. Das erzeugt dir dann jeweils ein Object-File (main.o, etc)
Und dann in einem zweiten Schritt wird gelinkt gcc *.o -o main - da müssten dann alle verwendeten Symbole auch Implementierungen haben.

Alternativ kannst du auch beides in einem Schritt machen (wie in deinem Befehl da oben), da müssen aber die Funktionimplementierungen zwingend auch mitkompiliert/gelinkt werden.

MfG Peschmä
"er hätte nicht in die usa ziehen dürfen - die versauen alles" -- Snoopy

SchroedingersKatze
Beiträge: 5
Registriert: 16.10.2011 13:27:26

Re: C-Programmierung: gcc kann nicht lesen

Beitrag von SchroedingersKatze » 01.07.2014 20:30:38

Ahaaa....!

Der gcc kann also doch lesen, und ich hätte nur mehr schreiben müssen! :)

Tausend Dank!

mfg
Schrödingers Katze

Antworten