arm-eabi arm-gnueabi和gnueabi-hf编译器之间的区别

pre*_*tam 36 linux gcc arm linux-device-driver linux-kernel

arm-eabi,gnueabi和gnueabi-hf交叉编译器有什么区别.我发现很难选择编译器.是否有针对arm的本机编译器?

Akh*_*zar 33

我不完全确定:

  • eabi代表将在裸机臂核心上运行的代码汇编.
  • gnueabi代表linux的代码编译

对于gnueabi/gnueabi-hf部分,我在这里找到了答案.

gcc-arm-linux-gnueabi是armel架构的交叉工具包.此工具链意味着由gcc的-mfloat-abi = soft或-mfloat-abi = softfp选项生成的EABI.

gcc-arm-linux-gnueabihf是armhf架构的交叉工具链包.此工具链表示由gcc -mfloat-abi = hard选项生成的EABI.

  • 另见:https://wiki.linaro.org/WorkingGroups/ToolChain/FAQ#What_is_the_differences_between_.2BIBw-arm-none-eabi-.2BIB0_and_.2BIBw-arm-linux-gnueabihf.2BIB0.3F_Can_I_use_.2BIBw-arm-linux- gnueabihf.2BIB0_tool_chain_in_bare-metal_environment.3F_How_do_you_know_which_toolchain_binary_to_use_where.3F*裸机ABI(eabi)将假设一个不同的C库(例如newlib,甚至没有C库)到Linux ABI(gnueabi,假设glibc).因此,编译器可能会根据它认为在标准C库之上和之外可用的内容进行不同的函数调用.* (7认同)
  • @AntonOstrouhhov 我找到了答案!工具链不仅意味着编译器,还意味着 binutils、已编译的库 (libc) 等。 => 2 个工具链:一个包含具有 Soft ABI 的库,另一个包含 Hard ABI :) (5认同)
  • 还有一个问题。为什么有 2 个工具链(`-gnueabi` 和 `-gnueabihf`)。为什么不使用 1 个能够理解 `-mfloat-abi=soft/hard/softfp` 选项的工具链(如本机 arm linux gcc)? (3认同)
  • 虽然我看到您是从外部资源中提取的,但此处使用“架构”具有误导性。`armel` 和 `armhf` 的区别根本上就是编译器生成的软件浮点和硬件浮点 EABI 的区别。 (2认同)
  • 除了在引用中使用`architecture`之外,措辞很好.我之所以提到它只是因为没有'armel架构'而误导它 - 它总是会成为ARM架构的编译器.编译器将根据编译期间给出的参数,使用特定的EABI在此类体系结构上使用.正如您的评论所述,gcc被指示使用软浮点机制,而不是支持硬件浮点机制(如果没有FPU,这是必要的).另外值得注意的是`armeb`选项,它是使用大端序的`armel`. (2认同)