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的库