system,直译为,系统
其实主要表示的,交叉编译器所选择的库函数和目标系统
最常见的一些值有,gnu,gnueabi,uclibcgnueabi等等。
其中,此处有几方面的值,表示了几方面的含义:
好像都是gnu
不是很明白,貌似是:
gnu == gnu libc == glibc
即,gnu,就是表示用的是glibc的意思。
crosstool-ng中,和system中gnu对应的值,应该就是"C-library"中的"C library"的值设置为"glibc"了。
C-library
C library (glibc) --->
对应的配置参数是:CT_LIBC_glibc
对应的help的解释是:
┌────────────────────────────────────────── glibc ──────────────────────────────────────────┐
│ CT_LIBC_glibc: │
│ │
│ The de-facto standard for Linux distributions. │
│ Feature-rich, but large... Most usefull for desktop-like systems. │
│ │
│ Symbol: LIBC_glibc [=y] │
│ Type : boolean │
│ Prompt: glibc │
│ Defined at config.gen/libc.in:53 │
│ Depends on: GEN_CHOICE_LIBC [=y] && LIBC_glibc_AVAILABLE [=y] && !WINDOWS [=n] && !\ │
│ BARE_METAL [=n] && ARCH_USE_MMU [=y] │
│ Location: │
│ -> C-library │
│ -> C library (GEN_CHOICE_LIBC [=y]) │
│ Selects: LIBC_SUPPORT_NPTL [=y] && CC_CORE_PASSES_NEEDED [=y] │
与此相对应的,之前早期的是oabi
eabi和oabi的对比,详见:
crosstool-ng中,和system中eabi对应的值,应该就是"Target options"中的"-*- Use EABI"的值了。
Target options
-*- Use EABI
注意:此处是选择的ARM,EABI在此处,已经是默认,无法修改的值,只能是EABI了。
好像是因为,Linux内核等其他选择导致的,此处无法更改EABI。
对应的配置参数是:CT_ARCH_ARM_EABI
对应的help的解释是:
┌──────────────────────────────────────── Use EABI ─────────────────────────────────────────┐
│ CT_ARCH_ARM_EABI: │
│ │
│ Set up the toolchain so that it generates EABI-compliant binaries. │
│ │
│ If you say 'n' here, then the toolchain will generate OABI binaries. │
│ OABI has long been deprecated, and is now considered legacy. │
│ │
│ Symbol: ARCH_ARM_EABI [=y] │
│ Type : boolean │
│ Prompt: Use EABI │
│ Defined at config/arch/arm.in.2:54 │
│ Depends on: ARCH_arm [=y] │
│ Location: │
│ -> Target options │
│ Selected by: ARCH_ARM_EABI_FORCE [=y] && ARCH_arm [=y] │
uclibc,是c库中的一种
crosstool-ng中,目前支持三种:glibc,eglibc,uclibc
关于三种的关系,详见:
【整理】uclibc,eglibc,glibc之间的区别和联系
crosstool-ng中,和system中uclibc对应的值,应该就是"C-library"中的"C library"的值设置为"uClibc"了。
C-library
C library (uClibc) --->
对应的配置参数是:CT_LIBC_uClibc
对应的help的解释是:
┌───────────────────────────────────────── uClibc ──────────────────────────────────────────┐
│ CT_LIBC_uClibc: │
│ │
│ The de-facto standard for embeded linux systems. │
│ │
│ Highly configurable, thus as feature-rich as you │
│ need, without compromising for size. │
│ │
│ Symbol: LIBC_uClibc [=y] │
│ Type : boolean │
│ Prompt: uClibc │
│ Defined at config.gen/libc.in:24 │
│ Depends on: GEN_CHOICE_LIBC [=y] && LIBC_uClibc_AVAILABLE [=y] && !WINDOWS [=n] && !\ │
│ BARE_METAL [=n] │
│ Location: │
│ -> C-library │
│ -> C library (GEN_CHOICE_LIBC [=y]) │
│ Selects: LIBC_SUPPORT_LINUXTHREADS [=y] && LIBC_SUPPORT_THREADS_NONE [=y] && \ │
│ CC_CORE_PASSES_NEEDED [=y] │
所以,针对上述,gnu,eabi,uclibc等几个选项,对应的常见的一些组合的含义是:
- gnu
等价于:glibc+oabi
- gnueabi
等价于:glibc+eabi
- uclibc
等价于:uclibc+oabi(待确认)
例 3.4. 举例:交叉编译器中的system的值
- arm-cortex_a8-linux-gnueabi中的gnueabi,即glibc+eabi
- mips-ar2315-linux-gnu中的gnu,即glibc+oabi
- powerpc-e500v2-linux-gnuspe中的gnuspe,没搞懂啥意思。。
- x86_64-unknown-mingw32中的mingw32,用的是Windows下的mingw32的库





