Linux 内核是为使用 gcc 编译而编写的,并且使用了许多小而丑的 gcc-hacks。除了 gcc,还有哪些编译器可以编译 linux 内核?
一个,可以,是英特尔编译器。内核编译需要什么最小版本?
还有一个 Tiny C 编译器,但它只能编译经过缩减和特殊编辑的内核版本。
是否有其他编译器能够构建内核?
Linux 内核是为使用 gcc 编译而编写的,并且使用了许多小而丑的 gcc-hacks。除了 gcc,还有哪些编译器可以编译 linux 内核?
一个,可以,是英特尔编译器。内核编译需要什么最小版本?
还有一个 Tiny C 编译器,但它只能编译经过缩减和特殊编辑的内核版本。
是否有其他编译器能够构建内核?
一个过时的信息:您需要修补内核才能使用英特尔 CC 下载适用于英特尔® 编译器的 Linux 内核补丁进行编译
另请参阅是否可以使用 gcc 以外的其他内容编译 Linux 内核以获取更多链接和信息
最新消息来源: http: //forums.fedoraforum.org/showthread.php?p=1328718
将 LLVMLinux 补丁提交到 vanilla 内核(2013-2014)的过程正在进行中。
LLVMLinux 是 Linux 基金会的项目:http://llvm.linuxfoundation.org/使vanilla 内核能够使用 LLVM 构建。许多补丁由 LLVMLinux 项目负责人 Behan Webster 准备。
2013 年 5 月有关于该项目的 LWN 文章 https://lwn.net/Articles/549203/ “LFCS:LLVMLinux 项目”
LLVMLinux 项目的当前状态在http://llvm.linuxfoundation.org/index.php/Bugs#Linux_Kernel_Issues页跟踪
已经从内核中消除的东西(基本上是 gcc-isms):* 显式寄存器变量(非 C99)* VLAIS(非 C99 兼容的未记录的 GCC 功能“结构中的可变长度数组”),例如 N 和 M 是非常量struct S { int array[N];}
的struct S { int array[N]; int array_usb_gadget[M]; }
函数参数 * 嵌套函数(GCC/Gnat 开发人员将 Ada 功能移植到 C 中;在 C99 中不允许) * 一些 gcc/gas 魔术,如特殊段或宏
要做的事情:*使用__builtin_constant_p
内置来实现可怕的魔法BUILD_BUG_ON(!__builtin_constant_p(offset));
关于 LLVMLinux 的好消息是,在它的补丁之后,内核不仅可以使用 LLVM+clang 构建,而且更容易由其他非 GCC 编译器构建,因为该项目杀死的 C99 代码不像 VLAIS 那样,由 usb gadget 作者创建,由netfilter 黑客,以及加密子系统黑客;嵌套函数也被杀死。
简而言之,你不能,因为编写内核代码是为了利用 gcc 的编译器语义......并且内核和编译代码之间的关系非常强,即必须使用 gcc 编译......因为gcc 使用“ELF”(嵌入式链接格式)目标文件,内核必须使用目标代码格式构建。除非您可以将其破解以与另一个编译器一起使用 - 它可能会编译但可能无法正常工作,因为 Windows 下的编译器生成 PE 代码,可能会出现意想不到的结果,这意味着内核可能根本无法启动!