21

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

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

4

10 回答 10

13

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

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

于 2009-03-27T11:11:49.387 回答
10

在某些时候tcc会处理和运行linux 内核源代码。所以那是肯定的,我猜。

::在评论中给ehemient的提示。::

于 2009-03-27T16:55:54.737 回答
9

LLVM开发人员正在尝试使用 clang 对其进行编译使用 clang 编译 Linux 内核的元错误有更多细节(该元错误的依赖关系树显示似乎剩下的很少)。

于 2009-06-15T00:00:19.833 回答
8

有一些努力(和补丁)来编译 2.6 内核的早期版本icc

于 2009-03-27T11:17:25.860 回答
7

是的。我已经做到了。请参阅[cfe-dev] Clang 构建一个正常工作的 Linux 内核(使用 SMP、网络和 X 引导到 RL5,自主机)

于 2010-10-25T20:24:39.913 回答
5

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

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

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

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

这就是为什么我们有伟大的 GNU/Linux 辩论。

于 2009-03-27T11:17:08.547 回答
3

很多很多很多年前,实际上可以使用 g++ 编译内核,据我所知,部分动机是因为 C++ 具有更强的类型检查,不一定要让 g++ 生成目标文件。但正如 Neil Butterworth 所指出的,Linus并不是特别 喜欢 C++,而且这再次成为可能的可能性为零。

于 2009-03-29T00:00:39.823 回答
1

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

https://github.com/path64/repositories

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

于 2011-06-17T14:58:04.020 回答
1

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

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

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

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

于 2011-11-07T13:27:14.017 回答
-3

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

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

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

于 2009-05-23T11:39:08.267 回答