23533

Error compiling hello world program C with arm-none-eabi-gcc

I am trying to compile a hello world program in C on a Linux 64-bit machine. I am using an ARM cross compiler to load my application onto an ARM processor. However, when compiling the code using arm-none-eabi-gcc -o hello hello.c I get a series of errors:

/home/dico/gcc-arm-none-eabi-4_7-2013q3/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/lib/libc.a(lib_a-exit.o): In function exit': exit.c:(.text.exit+0x2c): undefined reference to_exit' /home/dico/gcc-arm-none-eabi-4_7-2013q3/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/lib/libc.a(lib_a-sbrkr.o): In function _sbrk_r': sbrkr.c:(.text._sbrk_r+0x18): undefined reference to_sbrk' /home/dico/gcc-arm-none-eabi-4_7-2013q3/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/lib/libc.a(lib_a-writer.o): In function _write_r': writer.c:(.text._write_r+0x20): undefined reference to_write' /home/dico/gcc-arm-none-eabi-4_7-2013q3/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/lib/libc.a(lib_a-closer.o): In function _close_r': closer.c:(.text._close_r+0x18): undefined reference to_close' /home/dico/gcc-arm-none-eabi-4_7-2013q3/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/lib/libc.a(lib_a-fstatr.o): In function _fstat_r': fstatr.c:(.text._fstat_r+0x1c): undefined reference to_fstat' /home/dico/gcc-arm-none-eabi-4_7-2013q3/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/lib/libc.a(lib_a-isattyr.o): In function _isatty_r': isattyr.c:(.text._isatty_r+0x18): undefined reference to_isatty' /home/dico/gcc-arm-none-eabi-4_7-2013q3/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/lib/libc.a(lib_a-lseekr.o): In function _lseek_r': lseekr.c:(.text._lseek_r+0x20): undefined reference to_lseek' /home/dico/gcc-arm-none-eabi-4_7-2013q3/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/lib/libc.a(lib_a-readr.o): In function _read_r': readr.c:(.text._read_r+0x20): undefined reference to_read' collect2: error: ld returned 1 exit status

When I try compiling by doing: arm-none-eabi-gcc -c hello.c, it creates an object code hello.o which tells me that the compiler runs fine.

Could someone perhaps tell me why my compilation is return such errors please?

<strong>UPDATE</strong>

I realize now that the C runtime library isn't included in the compilation. Does anyone know of any options I need to include in the compilation or how to link the library to be able to use standard functions such as printf for example?

Answer1:

What should the MCU chip do with a printf string since there is no console? That's what is happening. libc needs low level functions that is platform dependent and shall not be included in the libc.

You need a retarget.c or a syscalls.c file that defines all these missing symbols and properly retarget the printf output to a serial line that you have access from the outside of the chip.

I strongly recommend you to use the yagarto toolkit, they provide a syscall.c file with what's necessary to build a project when linking against libc, as you are doing.

If you want to try the short path, include the syscall.c file to your project and reprogram its functions internals to suit your needs.

Linking bare gcc toolchain against libc in the microcontroller world is not for beginners. My recommendation is always to follow step by step yagarto's tutorials.

Recommend

  • Implementing logical right shift using only “~ & ^ | + > =” operators and 20 operations
  • Illegal character in Xml
  • t-sql most efficient row to column? crosstab for xml path, pivot
  • Screen Scraping
  • Determining proximity between 2 words in a sentence in Python
  • Placeholder Text
  • Is there a way to stop/re-start ejb 3.1 automatic timer during runtime?
  • How can I capture a key press, outside of the form?
  • How to send image as base64 string in JSON using HTTP POST in Android?
  • networkstream “cannot access a disposed object” when using newly created networkstream
  • Complicated COUNT query in MySQL
  • chrome PDF viewer can't download file
  • Can cPickle save reshaped numpy object reference?
  • where is chrome CSS Reference
  • Linked tables and Slicer in excel
  • closing WCF proxy
  • Enterprise Architect Synchronize with Code
  • Cannot run the macro
  • Aspect advising other aspects
  • Avoid Rendering “No Data Available in the table” in Datatables
  • How to implement arriving behavior with time delta?
  • Upload a video to Youtube using the python API and set it as unlisted
  • Python object matching using string
  • What is the right syntax for “timeframe” in MailChimp API 3.0
  • What is the best way to include a style sheet for a specific page?
  • Lua string.gsub() by '%s' or '\\n' pattern
  • Firebase, only get new children
  • In java, how do you retrieve images from a jar file?
  • Access Google Maps from outside
  • NHibernate proxyexception
  • Pointer vs Reference difference when passing Eigen objects as arguments
  • Get UILabel out of UIButton
  • c++ search a vector for element first seen position
  • Opaque reference instead of PImpl. Is it possible?
  • c++ regex_replace not doing intended substitution
  • using System.Speech.Synthesis with Windows10 universal app (XAML-C#)
  • How to make JSON.NET deserialize to Microsoft Date Time?
  • GAE: Way to get reference to an HttpSession from its ID?
  • Spring boot 2.0.0.M4 required a bean named 'entityManagerFactory' that could not be found
  • What is the purpose of TaskExecutor in spring?