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.
martin schrieb: > Möchte ich jedoch nur eine einfach Standard C ".c" und ".h" Datei > einbinden Möchten reicht nicht, du musst es auch tun... Also die Frage: Wie hast du die eingebunden? Oliver
was brauchst du für infos, ich hab bisher noch nie mit eclipse sondern nur mit avr studio gearbeitet. Die c und h datei sind normal im projekt eingebunden.
martin schrieb: > Was muss ich ändern, damit der Compiler alle Infos bekommt, damit dieses > Problem nicht auftritt. Du musst dich über die Bedeutung von
1 | extern "C" |
informieren.
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.
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.
M, nicht Q schrieb: > Vermutlich ist die gesamte Reihenfolge der .o Dateien verkehrt. Die Reihenfolge der .o Dateien spielt überhaupt keine Rolle. Die ist nur bei hinzugelinkten Bibliotheken wichtig.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.