undefined reference bei existierender Funktion

OP #5513862
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
Beitrag #5513868 wurde von einem Moderator gelöscht.
Gast #5513969
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren