1

我对工具链、arm-eabi-gcc、arm-linux-gcc 和 arm-elf-gcc 非常陌生。

对于 arm-linux-gcc 和 arm-elf-gcc,在我看来,只是使用了不同的 libc。

但是 arm-eabi-gcc 和 arm-linux-gcc 有什么区别?

我认为 arm-eabi-gcc 没有内置在 libc 中。我对吗 ?

如果没有,你能帮我纠正一下吗?

还有为什么 uboot 使用 arm-linux-gcc 作为默认的 arm 交叉编译器?

据我所知,uboot不需要那个libc来依赖。

所以这是我的问题。

谢谢!

4

2 回答 2

2

它被称为工具链的 thetarget alias或 the target-triplet,它的用途基本上是从其他工具链和您拥有的本机工具链中识别该工具链。它会告诉您构建工具链的架构、ABI 和目标主机,例如:

arm-none-gnueabi:裸机(无操作系统)gnu ABI

arm-linux-eabi:为托管系统生成二进制文件(运行 Linux 环境)

于 2012-11-05T08:44:04.263 回答
1

GCC 编译器*gcc是一个运行其他程序的驱动程序。所以运行

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

你就会明白其中的区别。他们可能都运行一些cc1程序进行汇编代码的转换,一些as程序将汇编程序代码汇编为目标代码,一些ld程序与一些标准库进行链接。他们也可能运行一些collect2包装一些链接等。

您可能还想简单地运行arm-linux-gcc -v或了解您的编译器是如何配置的,以及它们的精确版本arm-elf-gcc -varm-eabi-gcc -v

于 2012-11-05T07:59:39.960 回答