Du rufst eine Funktion auf die der Compiler/Linker nicht kennt, daher die Fehlermeldung. Welche Funktion das ist verrät er dir auch.
mfG
Markus
Hallo,
ich möchte mit eclipse in C den ASi-Master von Bihl + Wiedemann programmieren.
Das Programm funktioniert auch solange ich meine Routinen in der main.c betreibe.
Nun möchte ich die Routinen in eine Unterfunktion "Grundstellung.c" auslagern um die Programmübersicht zu vereinfachen und öfters auf diese Routinen zugreifen zu können.
Habe nun ein neues Source file bzw. Header file erzeugt und meinen Code dorthin übertragen. Ich habe die Funktion als "Grundstellung_anfahren ();" deklariert.
Beim Linken bekomme ich folgenden Fehler:
**** Attempting to build... ****
C:\Program Files\eclipse_control\Compiler\msys\1.0\bin\sh -c export PATH=../../Compiler/msys/1.0/bin:$PATH ;make -sf pbus.mak DEBUG=0 all
-----------------------
control -- Release
-----------------------
.release/main.o: In function `main':
C:\Program Files\eclipse_control\Workspace\Profibus/main.c:104: undefined reference to `Grundstellung_anfahren'
collect2: ld returned 1 exit status
make: *** [.release/control.elf] Error 1
Wenn ich das Selbe Programm in eine bereits existierende Unterfunktion einfüge, bei der ich zuvor alles lösche, funktioniert das Programm. Es muss dazugesagt werden, dass es vom Hersteller bereits ein Stück Code gab, welches ein Unterprogramm beinhaltet. In dieses habe ich es eingefügt aber wie gesagt zuvor den Inhalt gelöscht.
Kann mir jemand den entscheidenden Tip geben? Evtl. ist dieses Problem bereits jemandem geläufig.
Ich vermute dass es an irgendwelchen Grundeinstellungen liegt. Allerdings sind mir beim Vergleichen der Einstellungen der beiden Unterfunktionen keine Unregelmäßigkeiten aufgefallen.
Gruß Rena
Du rufst eine Funktion auf die der Compiler/Linker nicht kennt, daher die Fehlermeldung. Welche Funktion das ist verrät er dir auch.
mfG
Markus
Tiny ASURO Library: Thread und sf.net Seite
Hallo Markus,
soweit ist mir das bekannt aber dennoch nicht nachvollziehbar.
Wer genau liest stellt fest, dass dieser Fehler nur dann auftritt wenn ich die Funktion mit einer neu erstellten Unterfunktion aufrufe.
Wenn ich dann exakt den selben Code in einer bereits bestehenden Unterfunktion aufrufe (deren Inhalt habe ich vorher gelöscht, es wird dort also nichts zusätzliches deklariert) funktioniert es allerdings.
Gruß Rena
Ich finde keinen übersetzbaren Code, mit dem man das Problem nachvollziehen kann.
Was ist der Unterschied zwischen Funktion und Unterfunktion? In C sind Funktionen grundsätzlich global und werden auch global deklariert.dass dieser Fehler nur dann auftritt wenn ich die Funktion mit einer neu erstellten Unterfunktion aufrufe.
Wenn ich dann exakt den selben Code in einer bereits bestehenden Unterfunktion aufrufe (deren Inhalt habe ich vorher gelöscht, es wird dort also nichts zusätzliches deklariert) funktioniert es allerdings.
MfG Klebwax
Geändert von Klebwax (11.06.2014 um 10:43 Uhr)
Strom fließt auch durch krumme Drähte !
Hallo Klebwax,
es gibt eine Hauptfunktion "main.c", diese soll eine Unterfunktionen "Grundstellung.c" aufrufen.
Den Code hatte ich in der main.c gesschrieben und alles war prima.
Dann habe ich die Grundstellung.c erstellt und den Code dort hin kopiert. Dies funktioniert nicht.
Dann Code in eine bestehende "control_io.c" kopiert und vorher deren ursprünglichen Code entfernt. Dies funktioniert dann.
Es hat sich also an meiner "Unterfunktion" (diese nenne ich nun mal so) nichts inhaltlich geändert. Sie liegt nur wo anders ab.
Eventuell jetzt eine Idee?
Gruß Rena
Gruß Rena
Hallo Rena,
hast du dem Kompiler angegeben, dass die Datei Grundstellung.c einzubinden ist?
Hier mehr dazu...
MFG Sisor
Du wirfst Quelltextdateien mit Funktionen durcheinander. Grundeinstellung.c ist eine andere Datei mit Quelltext, wenn der Compiler die nicht kennt, gilt das auch für deren Inhalt!
Verwendest du ein Makefile oder kümmert sich Eclipse um den den Build-Vorgang? Weil: Eclipse kümmert sich normalerweise selbst darum, dass alle Quelltextdateien vom Compiler übersetzt werden. Wenn du mit einem Makefile arbeitest, musst du dieses dagegen selbst entsprechend anpassen!
Davon abgesehen: Du machst die aufgerufenen Funktionen hoffentlich auch in einem Header (Grundstellung.h) bekannt, den du in main.c einbindest?
mfG
Markus
PS: Evtl. solltest du dir einige C-Tutorials ansehen bevor du wild mit verschiedenen Quelltextdateien um dich wirfst. Modularisierung erfordert schon etwas Grundlagenverständnis.
Tiny ASURO Library: Thread und sf.net Seite
Lesezeichen