hallo zusammen, ich bin Neueinsteiger in der Embedded-Entwicklung und will den ARM Cortex-M4 auf einem STM32F429 Discovery in C Programmieren. Dazu nutze ich Eclipse Luna für C/C++ Entwickler mit der ARM-Toolchain auf einem Windows 7 Rechner. Beim Linken eines einfachen Makefile-Projekt tritt ein Fehler mit den folgenden Details auf: 13:39:07 **** Incremental Build of configuration Default for project TEMP **** make all 'Building target: _TEMP_' 'Invoking: Cross ARM C Linker' arm-none-eabi-gcc -mcpu=cortex-m4 -mthumb -O0 -Wall -g -Xlinker --gc-sections -Wl,-Map,"_TEMP_.map" -o "_TEMP_" ./startup/startup_stm32f429_439xx.o ./source/main.o c:/gnu_tools_arm_embedded/4.8_2014q3/bin/../lib/gcc/arm-none-eabi/4.8.4/ ../../../../arm-none-eabi/lib/armv7e-m\libg.a(lib_a-exit.o): In function `exit': exit.c:(.text.exit+0x16): undefined reference to `_exit' c:/gnu_tools_arm_embedded/4.8_2014q3/bin/../lib/gcc/arm-none-eabi/4.8.4/ ../../../../arm-none-eabi/lib/armv7e-m\libg.a(lib_a-sbrkr.o): In function `_sbrk_r': sbrkr.c:(.text._sbrk_r+0xc): undefined reference to `_sbrk' c:/gnu_tools_arm_embedded/4.8_2014q3/bin/../lib/gcc/arm-none-eabi/4.8.4/ ../../../../arm-none-eabi/lib/armv7e-m\libg.a(lib_a-writer.o): In function `_write_r': writer.c:(.text._write_r+0x10): undefined reference to `_write' c:/gnu_tools_arm_embedded/4.8_2014q3/bin/../lib/gcc/arm-none-eabi/4.8.4/ ../../../../arm-none-eabi/lib/armv7e-m\libg.a(lib_a-closer.o): In function `_close_r': closer.c:(.text._close_r+0xc): undefined reference to `_close' c:/gnu_tools_arm_embedded/4.8_2014q3/bin/../lib/gcc/arm-none-eabi/4.8.4/ ../../../../arm-none-eabi/lib/armv7e-m\libg.a(lib_a-fstatr.o): In function `_fstat_r': fstatr.c:(.text._fstat_r+0xe): undefined reference to `_fstat' c:/gnu_tools_arm_embedded/4.8_2014q3/bin/../lib/gcc/arm-none-eabi/4.8.4/ ../../../../arm-none-eabi/lib/armv7e-m\libg.a(lib_a-isattyr.o): In function `_isatty_r': isattyr.c:(.text._isatty_r+0xc): undefined reference to `_isatty' c:/gnu_tools_arm_embedded/4.8_2014q3/bin/../lib/gcc/arm-none-eabi/4.8.4/ ../../../../arm-none-eabi/lib/armv7e-m\libg.a(lib_a-lseekr.o): In function `_lseek_r': lseekr.c:(.text._lseek_r+0x10): undefined reference to `_lseek' c:/gnu_tools_arm_embedded/4.8_2014q3/bin/../lib/gcc/arm-none-eabi/4.8.4/ ../../../../arm-none-eabi/lib/armv7e-m\libg.a(lib_a-readr.o): In function `_read_r': readr.c:(.text._read_r+0x10): undefined reference to `_read' collect2.exe: error: ld returned 1 exit status make: *** [_TEMP_] Error 1 13:39:07 Build Finished (took 170ms) Leider gibt es zu der Fehlermeldung bei Google zu viele Anfragen mit verschiedenen Ursachen. Kann mir bitte jemand helfen? Falls noch Informationen benötigt werden - einfach fragen ;) Danke
Diese Funktionen sind die Backends, die von den entsprechenden Funktionen der Standardbibliothek aufgerufen werden. Die musst du selbst mit Leben ausfüllen, denn nur du weißt, woher ein read() bspw. etwas lesen soll. (Disclaimer: allzu tief stecke ich in den ARM-Dingen selbst noch nicht drin, das ist aber, wie ich es verstanden habe.)
Genaueres steht in der Doku. Das dürfte in dem Fall die der newlib sein. Und weil die schon sehr lange benutzt wird, wurde zu dem "Problem" auch schon wirklich alles geschrieben. Google weiß Bescheid... Oliver
Oliver S. schrieb: > auch schon wirklich alles geschrieben. Google weiß Bescheid Naja, dürfte hier eher eine Frage der passenden Suchbegriffe sein, damit man von diesem „alles“ einigermaßen schnell auf die fürs Thema relevanten Antworten kommt.
Ein kurzer Versuch mit "_exit _sbrk" zeigt schon fast 100% Trefferquote. So schwierig war das jetzt nicht ;) Oliver
Vielen Dank - der erste Beitrag hat mir sehr geholfen. Ich arbeite ohne bestehende libs. Der Linker hat Funktionen gesucht die ich nicht brauche also habe ich (-nostdlib) vor dem Linkeraufruf im makefile gesetzt.
Jörg Wunsch schrieb: > Diese Funktionen sind die Backends, die von den entsprechenden > Funktionen der Standardbibliothek aufgerufen werden. Solch feine Sachen gibt's in der AVR-LibC leider nicht :-(
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.