EABI还是GNU/Linux

本文介绍了如何根据目标系统选择正确的交叉工具链。以codesourcery的工具链为例,详细解释了不同版本之间的区别及适用场景。

应该选用GNU/Linux

=====================================

如何正确选择合适的交叉工具链

 

http://www.linuxidc.com/Linux/2011-04/35068.htm

我们自己可以编译制作一个交叉编译工具链(Cross-compile Toolchain)来用,但为了方便、稳定起见,我们大多数时候会去选择成熟的第三方工具链。

codesourcery的交叉工具链是很常见的一种,以ARM为例,我们可以从http://www.codesourcery.com/sgpp/lite/arm/portal/subscription?@template=lite处下载到最新的版本:

 

 

Target OS Download 
EABI Sourcery G++ Lite 2010.09-51
All versions...  
uClinux Sourcery G++ Lite 2010.09-58
All versions...  
GNU/Linux Sourcery G++ Lite 2010.09-50
All versions...  
SymbianOS Symbian ADT Sourcery G++ Lite 4.4-172
All versions... 


可以看到有4个OS平台版本可供选择,那么该选择哪一个下载呢?

在codesourcery的一个页面上我们找到了答案:

This table applies to the target system on which your applications will run, not to the host system on which you run Sourcery G++. 
Target Platform Description 
EABI/ELF RTOS systems or bare metal systems where no operating system is present. These configurations should not be used to build Linux kernels or applications.  用于RTOS或者没有os的硬件设备。这个配置不能用于构建内核或者应用程序。


uClinux™ Systems running uClinux, i.e. Linux on CPUs without an MMU. Use Sourcery G++ to build both the uClinux kernel and applications.  
GNU/Linux® Systems running full Linux, i.e., Linux on CPUs with an MMU. Use Sourcery G++ to build both the Linux kernel and applications.  这个用于运行带有MMU的CPU上的linux系统。可以构建linux内核和应用程序。


Microsoft Windows® Systems running Microsoft Windows 2000, or later. 

 

也就是说,如果打算用来编译linux kernel或者基于linux的应用程序,则应该选择GNU/Linux;EABI/ELF适用于没有操作系统(或者RTOS)的裸机;uClinux适用于没有MMU的Linux。

这下明白了?

C:\Users\fan_cuo\Desktop\arm-gnu-toolchain-14.3.rel1-mingw-w64-i686-arm-none-eabi\bin\arm-none-eabi-gcc.exe C:\Users\fan_cuo\CLionProjects\untitled5\main.c -o main C:/Users/fan_cuo/Desktop/arm-gnu-toolchain-14.3.rel1-mingw-w64-i686-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/14.3.1/../../../../arm-none-eabi/bin/ld.exe: C:/Users/fan_cuo/Desktop/arm-gnu-toolchain-14.3.rel1-mingw-w64-i686-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/14.3.1/../../../../arm-none-eabi/lib\libc.a(libc_a-exit.o): in function `exit': exit.c:(.text.exit+0x28): undefined reference to `_exit' C:/Users/fan_cuo/Desktop/arm-gnu-toolchain-14.3.rel1-mingw-w64-i686-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/14.3.1/../../../../arm-none-eabi/bin/ld.exe: C:/Users/fan_cuo/Desktop/arm-gnu-toolchain-14.3.rel1-mingw-w64-i686-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/14.3.1/../../../../arm-none-eabi/lib\libc.a(libc_a-closer.o): in function `_close_r': closer.c:(.text._close_r+0x18): undefined reference to `_close' C:/Users/fan_cuo/Desktop/arm-gnu-toolchain-14.3.rel1-mingw-w64-i686-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/14.3.1/../../../../arm-none-eabi/bin/ld.exe: C:/Users/fan_cuo/Desktop/arm-gnu-toolchain-14.3.rel1-mingw-w64-i686-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/14.3.1/../../../../arm-none-eabi/lib\libc.a(libc_a-lseekr.o): in function `_lseek_r': lseekr.c:(.text._lseek_r+0x24): undefined reference to `_lseek' C:/Users/fan_cuo/Desktop/arm-gnu-toolchain-14.3.rel1-mingw-w64-i686-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/14.3.1/../../../../arm-none-eabi/bin/ld.exe: C:/Users/fan_cuo/Desktop/arm-gnu-toolchain-14.3.rel1-mingw-w64-i686-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/14.3.1/../../../../arm-none-eabi/lib\libc.a(libc_a-readr.o): in function `_read_r': readr.c:(.text._read_r+0x24): undefined reference to `_read' C:/Users/fan_cuo/Desktop/arm-gnu-toolchain-14.3.rel1-mingw-w64-i686-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/14.3.1/../../../../arm-none-eabi/bin/ld.exe: C:/Users/fan_cuo/Desktop/arm-gnu-toolchain-14.3.rel1-mingw-w64-i686-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/14.3.1/../../../../arm-none-eabi/lib\libc.a(libc_a-writer.o): in function `_write_r': writer.c:(.text._write_r+0x24): undefined reference to `_write' C:/Users/fan_cuo/Desktop/arm-gnu-toolchain-14.3.rel1-mingw-w64-i686-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/14.3.1/../../../../arm-none-eabi/bin/ld.exe: C:/Users/fan_cuo/Desktop/arm-gnu-toolchain-14.3.rel1-mingw-w64-i686-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/14.3.1/../../../../arm-none-eabi/lib\libc.a(libc_a-sbrkr.o): in function `_sbrk_r': sbrkr.c:(.text._sbrk_r+0x18): undefined reference to `_sbrk' C:/Users/fan_cuo/Desktop/arm-gnu-toolchain-14.3.rel1-mingw-w64-i686-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/14.3.1/../../../../arm-none-eabi/bin/ld.exe: C:/Users/fan_cuo/Desktop/arm-gnu-toolchain-14.3.rel1-mingw-w64-i686-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/14.3.1/../../../../arm-none-eabi/lib\libc.a(libc_a-fstatr.o): in function `_fstat_r': fstatr.c:(.text._fstat_r+0x1c): undefined reference to `_fstat' C:/Users/fan_cuo/Desktop/arm-gnu-toolchain-14.3.rel1-mingw-w64-i686-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/14.3.1/../../../../arm-none-eabi/bin/ld.exe: C:/Users/fan_cuo/Desktop/arm-gnu-toolchain-14.3.rel1-mingw-w64-i686-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/14.3.1/../../../../arm-none-eabi/lib\libc.a(libc_a-isattyr.o): in function `_isatty_r': isattyr.c:(.text._isatty_r+0x18): undefined reference to `_isatty' collect2.exe: error: ld returned 1 exit status 还是报错
最新发布
11-01
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值