Frage zu C

L

Linthorul

Arch Luxer
Hallo,

wenn ich in C eine eigene Headerdatei einbinden will, will sich meine Datei nicht kompilieren lassen.

Die myheader.h sieht so aus:
Code:
#ifndef MYHEADER_H
#define MYHEADER_H

#define PI (3.1415)

extern int meineVariable;

int meineFunktion1(int);
int meineFunktion2(char);

#endif /* MYHEADER_H */

Die myheader.c:
Code:
#include "myheader.h"

int meineVariable = 0;

int meineFunktion1 (int i)
{
	return i++;
}

int meineFunktion2 (char c)
{
	if (c == 'A')
		return 1;
	return 0;
}

Das kompilieren klappt aber weder mit
Code:
gcc -o myheader myheader.c
noch mit
Code:
gcc myheader.c

Es kommt folgende Fehlermeldung:
Code:
/usr/lib/gcc/i486-linux-gnu/4.2.3/../../../../lib/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: ld returned 1 exit status

Was mach ich falsch?

Best regards,
thacrazze
 
wo ist denn deine main-funktion???
 
Sollte das nicht in etwa so aussehen?

Code:
#include <stdio.h>
#include "myheader.h"

int main()
{
 ....

Ist zwar bei mir schon sehr lange her, aber ich hab so noch in Erinnerung.
 
oder nur kompilieren

gcc -o myheader -c myheader.c

Eine main muss auf jeden Fall rein, wenn ein ausführbares Programm entstehen soll.
 
Du kannst die header nicht so leicht ohne hauptprogramm compilieren. Wenn du die header datei in dein hauptprogramm einbindest wird die header datei auch compiliert, wenn du dein hauptprogramm compilierst.
 
Nein, die Anleitung ist korrekt.

Es wird ja nur erklärt, wie das mit Header Dateien funktioniert.

Es geht nicht darum, ein eigenständiges Programm zu schreiben.

Die main() ist "nur" nötig, wenn du ein Programm erstellen willst. In dem "Tutorial" wird aber nur gezeigt, wie man allg. eine .obj Datei erstellt, die man - wie oben erwähnt - bspw. über gcc -o myheader -c myheader.c erstellt. Wenn du das eintipst, wird dein Compiler sich nicht beschweren, du erhälst aber logischerweise dann auch kein ausführbares Programm.
 
Dann ist die Anleitung hier falsch:
http://de.wikibooks.org/wiki/C-Programmierung:_Eigene_Header

Werd ich gleich mal korrigieren
Du solltest die Korrektur schnell wieder rueckgaengig machen, denn das Beispiel ist ohne main-Funktion voellig korrekt, waehrend ein Programm, dass nun myheader nutzen moechte, sich nicht mehr erstellen laesst.

Fuer ein ausfuehrbares C/C++Programm muss es genau eine main-Funktion geben. Im Wiki steht etwas von 'Kompilieren', und strenggenommen bedeutet das, die Option '-c' an gcc zu uebergeben. Damit wird der Quellcode kompiliert (in Maschinencode uebersetzt, myheader.o wird erstellt), jedoch keine ausfuehrbare Datei (executable) erstellt.
 
Du solltest die Korrektur schnell wieder rueckgaengig machen, denn das Beispiel ist ohne main-Funktion voellig korrekt, waehrend ein Programm, dass nun myheader nutzen moechte, sich nicht mehr erstellen laesst.
Hat schon einer gemacht.

Übrigens geht die Uhr hier in dem Forum um 20 Min. falsch.
 

Ähnliche Themen

Schwierigkeiten beim compillieren

deprecated conversion from string constant to ‘char*’

Problem beim Kompilieren (Redhat 5)

windows schneller als linux stdlib ...

NagiosGrapher 1.7.1 funktioniert nicht

Zurück
Oben