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