1
votes

i am very strange about the toolchains, arm-eabi-gcc, arm-linux-gcc, and arm-elf-gcc.

For arm-linux-gcc and arm-elf-gcc, in my opinion, just used the different the libc.

But what's the difference between arm-eabi-gcc and arm-linux-gcc ?

i regard that arm-eabi-gcc dont built in the libc. Am i right ?

if not, could you help to correct me ?

And also why uboot used arm-linux-gcc for the default arm cross compiler ?

As i know, the uboot dont need that libc for dependency.

so that is my problem.

thx!

2
This answer may also shed some light stackoverflow.com/questions/13143393/…auselen

2 Answers

2
votes

It's called the target alias or the target-triplet of the toolchain what it's for, basically, is to identify that toolchain from other toolchains and from the native one you have. It tells you what architecture, ABI and target host the toolchain is built for, example:

arm-none-gnueabi: bare metal (no operating system) gnu ABI

arm-linux-eabi: produces binaries for a hosted system (running a Linux environment)

1
votes

The GCC compiler *gcc is a driver program running other programs. So run

arm-linux-gcc -v -O -Wall helloworld.c -o hellworld-linux-gcc
arm-elf-gcc -v -O -Wall helloworld.c -o hellworld-elf-gcc
arm-eabi-gcc  -v -O -Wall helloworld.c -o helloworld-eabi-gcc

and you'll understand the differences. They probably all run some cc1 program doing the translation to assembly code, some as program doing the assembling of assembler code to object code, some ld program doing the linking with some standard libraries. They may also run some collect2 wrapping some linking etc etc.

You may also want to run simply arm-linux-gcc -v or arm-elf-gcc -v or arm-eabi-gcc -v to understand how your compilers have been configured, and their precise version.