【问题标题】:Is it possible to compile Linux kernel with something other than gcc是否可以用 gcc 以外的东西编译 Linux 内核
【发布时间】:2010-10-15 21:59:36
【问题描述】:

我想知道是否有人设法使用 gcc 以外的其他编译器编译 Linux 内核。或者如果有人曾经尝试过?问题可能看起来很愚蠢或学术性的,但当我想到以下问题的答案时,它就出现了:Are C++ int operations atomic on the mips architecture

似乎某些操作的原子性不仅取决于cpu架构,还取决于使用的编译器。所以,我想知道在 Linux 世界中是否存在除 gcc 之外的其他编译器。

【问题讨论】:

  • 我想知道为某些 cpu 架构编写的软件在使用不同的编译器编译时是否会停止正常工作(很可能是的,所以我想知道 gcc 编译器以外的其他编译器的概率有多大)曾经用于 Linux)。

标签: linux gcc linux-kernel


【解决方案1】:

Linux 显式依赖于某些gcc extensions,因此在这种情况下,任何其他编译器都必须与所需的扩展兼容。

这不是“否”,因为单独的编译器供应商/开发人员当然不可能跟踪 gcc 的扩展,只是一个可能帮助您搜索的数据点。

【讨论】:

  • 一些 undocumented gcc 扩展被 linux 开发人员使用,因为“它可以正常工作,并且没有任何 VLAIS 警告”,即使使用 -ansi -padantic(gcc 会在上面咆哮)只有很少使用的-pedantic-errors、thanks to Lundin)。
  • Linux Foundation 和 Behan Webster 在 2013-2014 年成功的 LLVMLinux 项目:llvm.linuxfoundation.org 从 vanilla Linux 内核中删除最差的 gcc-isms。
【解决方案2】:

在某些时候tcc 将处理和run linux 内核源。所以我猜是的。

::在 cmets 中向 ehemient 致敬。::

【讨论】:

  • bellard.org/tcc/tccboot.html "TCCBOOT 是一个引导加载程序,能够直接从其源代码编译和引导 Linux 内核。"是的,tcc 在某个时候能够构建一个可运行的 Linux 内核。
  • @ephemient:我从来没有注意到这一点。谢谢。
【解决方案3】:

LLVM 开发人员正在尝试使用clang 编译它。 meta-bug on compiling the Linux kernel with clang 有更多细节(dependency tree for that meta-bug 显示似乎剩下的很少)。

【讨论】:

  • 现在还有 Linux 基金会项目“LLVMLinux”来修补 linux 内核以供 LLVM 和 clang 编译:llvm.linuxfoundation.org
【解决方案4】:

已经努力(和patches)用icc 编译早期版本的2.6 内核。

【讨论】:

  • 最近,(2009 年 2 月 25 日)linuxjournal.com/content/…
  • 英特尔确实是唯一一个试图让内核与另一个编译器一起编译的公司。
  • 不知道,我很确定我设法用 icc 构建了内核(虽然我不记得是 2.6 还是 2.4)
【解决方案5】:
【解决方案6】:

IBM 的编译器在某些 Linux 版本之前能够做到这一点,但我现在不确定,我也不确定 IBM 按照指示优化内核的效果如何。我所知道的是,他们得到了建造。

由于 Linux 是自托管的(带有自己的 libc)并且从一开始就使用 gcc(和 gcc 交叉编译器)开发,因此使用其他任何东西有点愚蠢。

我认为主要是,使用预处理器宏和指令优化是最大的障碍(甚至没有脱离气体),因为 GNU 基本上已经在上面写了这本书,并对其进行了扩展。除此之外,Linux 会调整其优化以使用 gcc,例如,不要在没有非常好的理由的情况下在内核中使用 'volatile'。使用内联并实际让编译器同意是另一个挑战。

Linus 是第一个将 GCC 称为 &*#$ 漏洞的人,这有助于更好的编译器。

这就是为什么我们要进行 GNU/Linux 大辩论的原因。

【讨论】:

【解决方案7】:

很多很多很多年前,compile the kernel with g++ 实际上是可能的,据我所知,部分动机是因为 C++ 具有更强的类型检查,不一定要让 g++ 生成目标文件。但正如 Neil Butterworth 所指出的,Linus 是 not particular fond of C++,这再次成为可能的可能性为零。

【讨论】:

    【解决方案8】:

    EKOPath 4 编译器,不是现在。但可能有一些小补丁

    https://github.com/path64/repositories

    http://www.pathscale.com/ekopath-compiler-suite

    【讨论】:

      【解决方案9】:

      我现在正在使用 Open64 为 MIPS 架构编译 Linux 内核,而其他一些人现在正在为使 Open64 可以为 X86 架构构建而工作。现在内核可以部分运行,但仍然有运行失败错误。

      但是对于原子问题,至少我还没有想出来。而且我不认为这真的是一个问题。原因是:

      1. Linux内核已经是源代码的集合,可以用GCC成功构建,所以如果不能构建,或者构建的内核运行失败,只是编译器的问题。

      2. 如果一个编译器想要成功构建Linux内核,就应该遵守GNU C Extension,而这个扩展会明确说明什么是原子操作,所以这样的编译只需要根据这个扩展。

      【讨论】:

        【解决方案10】:

        我的非技术猜测:Linux 内核目前(2009)不能用除 GNU 编译器之外的任何编译器编译,gcc强>。

        我这么说是因为我听说 Richard Stallman 有一定的信念,他说 Linux 应该被称为 GNU/Linux 因为内核“只有 1操作系统的一部分”,我猜如果内核不依赖于 GNU(例如,大量嵌入式设备在没有任何 GNU 软件的情况下运行 Linux 操作系统),他将无法这么说。

        正如我所说,只是一个猜测,如果我错了,请告诉我......

        【讨论】:

        • RMS 指的是 GNU coreutils 和其他用户级实用程序。
        猜你喜欢
        • 1970-01-01
        • 2021-10-27
        • 2011-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多