undefined reference ...

E

erinus

Grünschnabel
Hallo,

ich (Neuling in Sachen C) untersuche gerade, wie das ist, wenn man den Code auf mehrere Dateien verteilt. Und prompt bleibe ich hängen. Der Compiler meldet "undefined reference" in main, und zwar auf printadr. Wahrscheinlich ist es nur eine kleine Macke, aber ich finde sie nicht. Tut mir leid, dass ich den kompletten Testcode wiedergeben muss, aber ich habe ihn so kurz gefasst wie möglich:

Code:
------ Header main.h ------------------

#ifndef MAIN_H
#define MAIN_H

#include <stdio.h>
#define name "Siggi Supertroll"

#endif

------ Hauptprogramm main.c -----------

#include "main.h"
#include "adr.h"

int main () {
  printadr ();
}

------ Header adr.h -------------------

#ifndef ADR_H
#define ADR_H

#include "main.h"
#define plz "33333"
#define ort "Trollheim"
 
void printadr ();

#endif

------- adr.c ---------------------

#include "adr.h"

void printadr () {
  printf (name "\n" plz " " ort "\n");
}

------ Makefile -------------

all : adresse main.o unit.o
adresse : main.c
	gcc -o adresse main.c
main.o : main.c
	gcc -c main.c
unit.o : unit.c
	gcc -c unit.c

Was ist falsch?

Gruß,
Reinhard
.
.
.
EDIT (autom. Beitragszusammenführung) :
.

pardon, da ist leider das falsche Makefile reingerutscht. Es heißt dort natürlich adr.o und nicht unit.o.
 
Zuletzt bearbeitet:
Hi,

muessen in dem Makefile die Header nicht auch mitdrin stehen?

Also : adresse main.c main.h
gcc -o adresse main.c main.h

und analog fuer die anderen?

Andrea
 
muessen in dem Makefile die Header nicht auch mitdrin stehen?

Also : adresse main.c main.h
gcc -o adresse main.c main.h

und analog fuer die anderen?

Ich denke, in der Zeile der Abhängigkeiten schon. Sonst würden Änderungen im Header ja nicht erfasst. Aber in der Ausführungszeile (gcc ...) halte ich das für unlogisch, weil die Header ja mit #inlcude wörtlich eingebunden werden. Und tatsächlich meldet gcc in diesem Fall auch einen Fehler. Ich glaube nicht, dass es am Makefile liegt.

Gruß
Reinhard
 
Code:
adresse : main.c
	gcc -o adresse main.c
In diesen Zeilen des Makefiles liegt das Problem.
Du musst das ganze mit
Code:
gcc -o adresse main.c adr.c
kompilieren.
Alternativ deklarierst du printadr() als extern und erstellst vorher Objekt-Dateien, die du dann linkst.
Code:
gcc -c main.c
gcc -c adr.c
gcc -o adresse main.o adr.o
 

Ähnliche Themen

Ausführbare C-Datei von Mac OS auf Embedded Linux ausführen

Funktion nicht gefunden

2 Module 1 Header kein Programm

Problem beim Kompilieren (Redhat 5)

sem_open - Problem mit Semaphoren

Zurück
Oben