Forum: Compiler & IDEs undefined reference bei existierender Funktion


von Alexander H. (ill_son)


Lesenswert?

Hallo,

ich habe ein C-Projekt für einen XMEGA, in das ich die fats von Elm Chan 
eingebunden habe.
1
#include "ff.h"

Damit ich bei komplexeren SD-Operationen nicht so viel Code in der 
main.c habe und diese damit unübersichtlich wird, habe ich mir eine Art 
Wrapper geschrieben, der die Funktionen enthält, die ich benötige. Dort 
rufe ich dann die eigentlichen f_Funktionen der fats-Bibliothek auf.
1
typedef FRESULT SD_RESULT;
2
3
SD_RESULT sd_fdisk( void )
4
{
5
  DWORD plist[] = {100, 0, 0, 0};
6
  BYTE work[_MAX_SS];
7
8
  SD_RESULT r = f_fdisk(0, plist, work);
9
10
  return r;
11
}


Nun habe ich das Problem, dass ich beim Aufruf der Funktion f_disk eine 
Fehlermeldung bekomme: undefined reference to f_fdisk, sobald ich 
sd_fdisk in der main.c aufrufe. Die anderen Funktionen gehen.

Header ist eingebunden dort steht auch alles drin ff.c und die andere 
c-Files auch zum Projekt hinzugefügt. Ich weiß gerade nicht weiter.

Grüße, Alex

: Bearbeitet durch User
Beitrag #5513868 wurde vom Autor gelöscht.
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Alexander H. schrieb:
> ff.c und die andere c-Files auch zum Projekt hinzugefügt.

Auch die Datei von Elm Chan, in der die Funktion f_disk enthalten ist?

von Alexander H. (ill_son)


Lesenswert?

Ja, die Funktion ist in der ff.c enthalten, welche ich zum Projekt 
hinzugefügt habe. Alle anderen Funktionen wie f_mount, f_read usw. 
funktionieren ja.

von Theor (Gast)


Lesenswert?

Die Meldung kommt vom Linker.
Die Deklaration in der Header-Datei allein ist nicht ausschlaggebend.

Zwei einfache Voraussetzungen sind:
1. Übereinstimmung des Funktionsnamens.
2. Objekt-Datei mit dieser Funktion wird an den Linker übergeben.

Etwas verzwickter kann unter Umständen (wir kennen den Code ja nicht) 
sein:
Die beim Aufruf und allen Deklarationen der Funktion verwendeten 
Rückgabe- und Parametertypen müssen entweder

a) wortwörtlich übereinstimmen

oder

b) durch die im Sprachstandard beschriebenen impliziten Umwandlungen 
(z.B. Integer-Erweiterung) vom Compiler passend gemacht werden können.


Die meisten Probleme einer der beiden Arten, können durch die 
Aktivierung der relevanten Warnungen (am einfachsten ist die 
Aktivierung aller Warnungen) erkannt werden.

von Markus F. (mfro)


Lesenswert?

C++ anstatt C-Compiler benutzt?

von Alexander H. (ill_son)


Lesenswert?

Problem gelöst. Irgendwo weiter oben im c-File ist eine 
Präprozessoranweisung für bedingte Kompilierung, die ich übersehen habe. 
Sorry und danke für eure Mühe.

Grüße, Alex

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.