2008-12-23 102 views
5

我正在研究使用arm-linux-xxx构建内核的uClinux系统,但使用arm-elf-xxx构建了用户应用程序。arm-linux-gcc vs arm-elf-gcc

如果应用程序打算在Linux上运行,用arm-linux-xxx构建所有东西不是更好吗?

在uClinux的整体配置中,在哪里设置该选项?

+0

是ARM-Linux的*和手臂,elf- *符号链接到其它应用程序?例如,我的系统上,在arm-linux的-GCC点为arm-未知的Linux uclibceabi-GCC。 – ctuffli 2009-01-19 14:52:02

回答

0

ELF是二进制格式linux and many others使用:

ELF格式取代了旧的 可执行文件格式,如a.out的和 COFF在许多类似Unix的操作系统 系统如Linux,Solaris和IRIX , FreeBSD,NetBSD,OpenBSD,DragonFly BSD,Syllable和HP-UX(除了 32位PA-RISC程序,其继续使用 以使用SOM)。 ELF还出现了一些 采用在非Unix操作系统 系统,如安腾版本的OpenVMS的 ,和BeOS的修订4和 后来用于基于x86计算机(其中 它取代了可移植可执行 格式; PowerPC的版本住具有首选可执行格式的 )。 PlayStation Portable,PlayStation 2, PlayStation 3,Wii和GP2X游戏机 也使用ELF。 AmigaOS 4和MorphOS 也在PowerPC机器上运行,使用 ELF。在Amiga平台上,ELF 可执行文件替代了之前在配备PPC 处理器扩展卡的Amigas上使用的 EHF(Extended Hunk Format)。 Symbian vOS v9使用基于ELF文件格式的E32Image [3]格式,即 。

大多数索尼爱立信(例如, W800i,W610,K790,等),一些西门子 (SGOLD和SGOLD2平台:从 西门子C65至S75和明基西门子 E71/EL71)以及摩托罗拉(例如, 的E398,SLVR L7,V360,V3I和所有 电话LTE2它有补丁应用) 电话可以通过 使用补丁,增加了汇编代码 到主固件(被称为运行ELF文件在地下改装 文化)。

0

我似乎记得在某些时候,那中间的位并不重要。如前所述,elf是标准的文件格式,无论如何你都要使用它,并且无论如何都会得到独立于二进制名称的文件格式。什么可能(或不是)更重要的是调用约定,我不知道是否在调用共享库函数时必须使调用约定匹配,或者如果在别处处理它。

2

编译器的名称并不一定意味着什么。取决于编译器的构建者(并将其命名),您将得到不同的结果。可以说,对于特定的配置有一个正确的名称,但是一些随机编译的gcc可能不正确。

对于CodeSourcery编译器(可能是最正确的名称),请参阅their platforms page以了解它们的命名含义。

0

区别在于arm-elf-xxx工具链的链接输出是一个linux可加载的二进制文件,而arm-linux-xxx输出一个内核对象(ko),它是一个具有自己链接格式的blob模块)或主内核本身,它不需要打包格式。即,对于用户空间,您希望最终的动态链接对象成为ELF可执行文件,库或共享对象。对于内核空间,您希望最终对象(内核或模块)处于linux-arm-kernel链接格式。

你会发现,这两个目标的中间对象(.o文件)可能是所有ELF,因为这是工具链期待。

+0

这是非常错误的。对于内核和用户空间构建,工具链(或者不需要*成为一个)没有区别。 – 2012-04-03 14:27:45

2

您可以运行arm-linux-gcc -varm-elf-gcc -v以查看这两个gcc版本(如目标体系结构/语言)之间的一些差异。

0

在我们的例子中,我们建立的Linux使用SPARC-ELF-gcc和我们使用SPARC -..-的linux-GCC构建的busybox(appliation在Linux上运行)。我认为这是正确的,而不是相反。

相关问题