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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.