我了解到内核头文件指定了程序如何与内核交互,因此它们必须参与构建标准库,或者?我刚刚阅读了一个教程,该教程解释了如何构建arm-elf工具链(http://wiki.ubuntuusers.de/GNU_ARM-Toolchain)非常好。
令我困惑的是,此过程中没有涉及内核头文件。他们用
配置gcc../gcc-4.3.2/configure --target=arm-elf --prefix=/opt/gnuarm --enable-interwork --enable-multilib --enable-languages="c,c++" --enable-target-optspace --with-float=soft --with-newlib --with-headers=../newlib-1.16.0/newlib/libc/include/ --disable-nls
和Newlib与
../newlib-1.16.0/configure --target=arm-elf --prefix=/opt/gnuarm --enable-interwork --enable-multilib --enable-target-optspace --with-float=soft
它告诉我他们只从newlib中获取头文件(他们使用newlib而不是glibc)。此目录中的文件看起来非常通用。我希望Linux“内核版本”出现在这个过程的某个地方,但事实并非如此。我认为Linux ABI可以从内核版本更改为内核版本。内核(标题)和gcc工具链之间的“连接”如何?
答案 0 :(得分:0)
如果没有Linux内核头文件,就无法构建GNU C库。大多数C库函数都是使用系统调用实现的,内核头文件定义了系统调用接口。当然,标头附带内核源代码,但必须先为处理器体系结构修补和配置源代码,然后才能使用它们来构建C库。
答案 1 :(得分:0)
您要构建的示例是针对newlib的,这是一个裸机libc实现。这意味着不需要运行二进制文件的操作系统,也不需要构建Linux头文件。
如果您构建glibc或Musl工具链。您将需要Linux标头。