Fehlermeldung kompilieren

Also ich bin totaler Neuling beim Programmieren und habe nach einigen Monaten erneut angefangen ein Buch über das programmieren zu lesen (Da ich noch Schülerin bin, kam ich nicht dazu und da ich die hälfte wieder vergessen hatte, habe ich einfach von vorne begonnen.)
So. Ich bin jetzt wieder dabei mein erster Quelltext für ein Konsolenprogramm zu schreiben…„Hello world“ =.=
eigentlich das einfachste von allem und ich habe es auch schon häufiger programmiert, aber dieses Mal kann ich es so oft versuchen wie ich will…Ich bekomm es nicht hin! D:
Ich glaube ich versteht mich, wenn ich sage, dass es deprimierend ist.

Das war die Vorgeschichte, nun zu meinem Problem. Ich hatte bisher nur Fehlermeldungen, bei denen mir die Zeilen angezeigt worden waren, aber diesmal habe ich wohl das Programm falsch abgespeichert oder so. Auf jeden Fall erhalte ich beim kompilieren diese Fehlermeldung:
Erste Zeile der Fehlermeldung:
[Linker error] test.o:test.c:frowning:.text+0x28): undefined reference to `System’
Zweite Zeile:
collect2: ld returned 1 exit status
dritte Zeile:
(Davor steht noch die Datei, indem ich es, glaube ich, abgespeichert habe)[helloworld.exe] Error 1 (if this is the only error: please check your library includes)

Anhand der Linker-Zeile gehe ich davon aus, dass Du auf einem Unix-System bist. Ich vermute von daher, dass bei der Befehlszeile des Linkers die Angabe von Bibliotheken fehlt. Auch kenne ich den Quellcode nicht. Aber vieleicht hilft Dir das folgenden Kurztutorial mit einem Beispiel weiter:
http://www.oreilly.de/german/freebooks/rlinux3ger/ch…

Gruß Klaus

Hi,

dies ist dein Fehler:

if this is the only error: please check your library includes

Das Symbol „System“ (eine Klasse oder ähnliches) kann der Compiler nicht auflösen. Dir fehlt höchst wahrscheinlich nur ein #include der Headerdatei, die das Symbol definiert. vielleicht #include „System.h“ ???

Suche danach und du wirst sicher fündig.

Bye

Hallo KeikoKato,
zuerst müsste man mal etwas wissen:

  • in welcher Programmiersprache willst Du etwas schreiben ?
  • hast Du vielleicht einen Quellcode, den man sich anschauen kann ?
  • ist die Programmiersprache richtig installiert ?
    Leider habe ich für Dich aktuell keine Lösung.
    Gruß Alfred

Leider reichen deine Angaben nicht aus, um eine wirklich vollständige Antwort zu geben. Gib doch in Zukunft bitte den Quelltext mit an, bei dem die Fehlermeldung auftritt.

Anhand der Fehlermeldung rate ich, dass du in deinem Programm die Funktion „System“ benutzt und auch irgendwo deklariert (möglicherweise inkludiert) hast, weil die Fehlermeldung erst durch den Linker und nicht vorher ausgelöst wurde. Dadurch ergeben sich bereits zwei Fragen:

Wofür benutz du die Funktion in dem Beispiel? Und wo steht der Prototyp der Funktion?

Wenn du den Quelltext ohne Änderun kompilieren möchtest, musst du (je nach Entwicklungsumgebung unterschiedlich) diejenige Bibliothek einbinden, die die Funktion „System“ enthält. Für wahrscheinlicher halte ich aber, dass der Aufruf in das Programm nicht hinein sollte. Ein typisches Beispiel für „hello world“ in C ist:

#include 

int main()
{
 printf("hello world\n");
 return 0;
}

Hallo,

kannst du bitte dazu deinen Quellcode posten? Welchen compiler benutzt du? GCC? Welches Betriebssystem Linux oder Windows oder was ganz anderes?

Viele Grüße
Steffen

Hallo,

da du sagst, dass du blutige Anfängerin bist, hier mal ein paar „basics“:

  • dein Sourcecode, den du bearbeitest, steht in test.c
  • beim Kompilieren entsteht daraus der Objektcode (test.o)
  • der Linker bindet dazu noch Programmteile hinzu, die von deinem „C-EntwicklungsPaket“ mitgeliefert werden und die zum Ausführen deines Programmes benötigt werden (z.B. Routinen zur Ein-/Ausgabe oder zur Speicherverwaltung oder oder … )
  • das ausführbare Programm ist dann helloworld.exe (EXEcutable)

So eine Fernanalyse von Fehlermeldungen ist natürlich ein gewagtes Unterfangen, aber die erste Zeile sagt: du benutzt etwas („System“), was nicht definiert ist, und das ist nicht dem Compiler aufgefallen, sondern dem Linker. Da der Linker mit Binärcode (=übersetztem Code) arbeitet, gibt’s hier keine Zeilennummern. Möglicherweise kann man mit dem (.text+0x28) etwas anfangen, aber da muss ich passen.
In der letzten Zeile gibt es noch den Hinweis: check your library includes.

Irgendwo in deinem „Projekt“ kannst/musst du angeben, welche libraries (Sammlungen von grundlegendem Funktionen) hier verwendet werden sollen. (Manchmal sind die unbedingt nötigen libraries schon eingestellt.) Wo das in deinem Fall steht, musst du selber herausfinden (sorry), das ist in jedem EntwicklungsPaket anders. Und da muss dann entweder direkt z.B. „syslib“ angegeben sein oder ein anderer Name, der die angemeckerte „reference to `System’“ enthält. Diese Lib muss natürlich an der angegebenen Stelle vorhanden sein. Oft kann man den Pfad dorthin an einer anderen Stelle angeben (z.B. „Path to Libraries“), damit man den ganzen Schlonz nicht bei jeder Lib mit hinschreiben muss.

Ich will die Zusammenhänge nochmal an einem konkreten Beispiel erläutern:
In deinem Programmcode benutzt du z.B. die Funktion printf (was die macht, ist hier erstmal egal):
> printf("%i plus %i ist gleich %s.", 3, 2, „Fünf“);
printf ist in der Header-Datei stdio.h DEFINIERT:
> #include
Dieses include muss im Programmcode enthalten sein (möglicherweise auch in einer anderen Header-Datei). Es wird folglich auch vom Compiler bearbeitet.
Dort stehen, wie gesagt, nur die Definitionen. Der Code, der die eigentliche Arbeit macht, steht in den Libraries. In diesem Fall ist das die „stdio“. Und die wird vom Linker hinzugefügt, um das ausführbare Programm zu erhalten. WENN der Linker das weiß und die Lib findet …

Ich hoffe, dass irgendein Teil meiner Ergüsse dir weiterhilft!