Eclipse GNU ARM error undefined reference

Gast #3506903
Lesenswert?

Hallo

ich habe mir Eclipse mit dem GNU ARM Eclipse Plug-in für den Beaglebone 
nach dieser Anleitung http://www.youtube.com/watch?v=I667-sAzzZg 
eingerichtet.

http://sourceforge.net/projects/gnuarmeclipse/files/Eclipse/updates/

Was funktioniert:
- ich kann meine main.c kompilieren und erfolgreich auf dem Board 
ausführen.
- erzeugen einer weitere Klasse und Verwendung dieser in der main geht 
auch

Was geht nicht:
Möchte ich jedoch nur eine einfach Standard C ".c" und ".h" Datei 
einbinden bekomme ich beim kompilieren den Fehler "undefined reference 
to..."

'Building target: test.elf'
'Invoking: ARM Windows GCC C++ Linker (Sourcery Lite Linux)'
arm-none-linux-gnueabi-g++ -s -Wl,-Map,"test.map" -mcpu=cortex-a8 
-mthumb -mfloat-abi=soft -g3 -o "test.elf"  ./src/src/beaglebone.o 
./src/src/beagledelay.o ./src/src/beaglegpio.o ./src/src/beaglegpiomem.o 
./src/src/beaglepins.o ./src/src/beaglepwm.o ./src/src/beagleuart.o 
./src/src/pair.o  ./src/lib/functions.o ./src/lib/gpio_c.o 
./src/lib/led_c.o  ./src/main.o

./src/main.o: In function `main':
D:\sync\workspace\test\Debug 2/../src/main.cpp:35: undefined reference 
to `gpio_export(unsigned int)'


Was muss ich ändern, damit der Compiler alle Infos bekommt, damit dieses 
Problem nicht auftritt.
#3508379
Lesenswert?

So recht werd ich aus deiner Beschreibung nicht schlau.

Was muss man sich unter einer weiteren .c bzw. .h Datei vorstellen.

Du linkst hier
1
arm-none-linux-gnueabi-g++ -s -Wl,-Map,"test.map" -mcpu=cortex-a8 -mthumb -mfloat-abi=soft -g3 -o "test.elf" ./src/src/beaglebone.o ./src/src/beagledelay.o ./src/src/beaglegpio.o ./src/src/beaglegpiomem.o ./src/src/beaglepins.o ./src/src/beaglepwm.o ./src/src/beagleuart.o ./src/src/pair.o ./src/lib/functions.o ./src/lib/gpio_c.o ./src/lib/led_c.o ./src/main.o

Die folgenden Dateien
1
./src/main.o
2
./src/lib/led_c.o
3
./src/lib/gpio_c.o
4
./src/lib/functions.o
5
./src/src/pair.o
6
./src/src/beagleuart.o
7
./src/src/beaglepwm.o
8
./src/src/beaglepins.o
9
./src/src/beaglegpiomem.o
10
./src/src/beaglegpio.o
11
./src/src/beagledelay.o
12
./src/src/beaglebone.o
alles O-Dateien, die sind also dadurch entstanden dass die von einem 
C-Compiler aus einer .c Datei generiert wurden.

Was mir jetzt komisch vorkommt. Anhand der Dateinamen würde ich mal 
vermuten, dass alle diese O-Dateien mit Ausnahem der ersten, vom ARM-GCC 
System zur Verfügung gestellt werden. Dazu passt zwar nicht die 
Pfadangabe bei den jeweiligen Dateien, aber egal.
Von einer zweiten, von dir geschriebenen Code-Datei (die ein eigens 
O-File haben müsste) kann ich da nichts entdecken.

Welche dieser Dateien gehören jetzt wirklich zu deinem Projekt und 
welche sind System-Dateien?

denn in irgendeiner dieser Dateien müsste es eine Funktoin namens 
'gpio_export' geben. Die Fehlermeldung 'undefined reference' besagt 
jetzt nichts anderes, dass es sie aber nicht gibt. gpio_export gehört 
aber zu den Systemfunktionen, die eigentlich vorhanden sein müssten, 
wenn tatsächlich alle zum System gehörenden Object-Code Files aufgeführt 
sind. Schon alleine das kommt mir ein wenig seltsam vor, dass die hier 
scheinbar alle aufgeführt werden, denn normalerweise steckt man die in 
eine Library und linkt die Library. Aber da weiß ich zuwenig davon, wie 
das ARM Gcc System aufgebaut ist.
Gast #3508381
Lesenswert?

Die Linker-Reihenfolge stimmt vermutlich nicht (und nein, der Linker 
arbeitet nicht mit #include-Pfaden).

Verdächtig ist, dass main.o zuletzt in der Linker-Liste steht. Dass 
müsste zuerst (oder für den seltenen Fall das man eigenen Startup-Code 
hat ganz weit vorne) stehen.

Vermutlich ist die gesamte Reihenfolge der .o Dateien verkehrt.
Gast #3508465
Lesenswert?

Oliver schrieb:
> Also die Frage: Wie hast du die eingebunden?

Mach einfach einen Screenshot von Eclipse mit offenem Projektbaum.

Was verstehst du unter "Klassen"? Das gibt es eiggentlich nur in C++, du 
aber kompilierst C-Files (und nein, das ist nicht das selbe)

Zeig doch mal den Compiler-output, nicht nur den des linkers.

Fragen über Fragen...

Oliver

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