我想知道是否有人设法用 gcc 以外的其他编译器编译 Linux 内核。或者如果有人曾经尝试过?问题可能看起来很愚蠢或学术性的,但是当我想到以下问题的答案时就出现了:Are C++ int operations atomic on the mips architecture
似乎某些操作的原子性不仅取决于 cpu 架构,还取决于使用的编译器。所以,我想知道在 Linux 世界中是否存在除 gcc 之外的其他编译器。
我想知道是否有人设法用 gcc 以外的其他编译器编译 Linux 内核。或者如果有人曾经尝试过?问题可能看起来很愚蠢或学术性的,但是当我想到以下问题的答案时就出现了:Are C++ int operations atomic on the mips architecture
似乎某些操作的原子性不仅取决于 cpu 架构,还取决于使用的编译器。所以,我想知道在 Linux 世界中是否存在除 gcc 之外的其他编译器。
Linux 明确依赖于一些gcc 扩展,因此在这种情况下,任何其他编译器都必须与所需的扩展兼容。
这不是“否”,因为单独的编译器供应商/开发人员当然不可能跟踪 gcc 的扩展,这只是一个可以帮助您搜索的数据点。
LLVM开发人员正在尝试使用 clang 对其进行编译。使用 clang 编译 Linux 内核的元错误有更多细节(该元错误的依赖关系树显示似乎剩下的很少)。
IBM 的编译器在某些 Linux 版本之前能够做到这一点,但我现在不确定,我也不确定 IBM 按照指示优化内核的效果如何。我所知道的是,他们得到了建造。
由于 Linux 是自托管的(具有自己的 libc)并且从一开始就使用 gcc(和 gcc 交叉编译器)开发,因此使用其他任何东西有点愚蠢。
我认为主要是,使用预处理器宏和指令优化是最大的障碍(甚至没有脱离gas),因为GNU基本上已经在上面写了这本书,并对其进行了扩展。除此之外,Linux 会调整其优化以使用 gcc,例如,不要在没有非常好的理由的情况下在内核中使用 'volatile'。使用内联并实际上让编译器同意是另一个挑战。
Linus 是第一个将 GCC 称为 &*#$ 漏洞的人,这使得编译器更好。
这就是为什么我们有伟大的 GNU/Linux 辩论。
很多很多很多年前,实际上可以使用 g++ 编译内核,据我所知,部分动机是因为 C++ 具有更强的类型检查,不一定要让 g++ 生成目标文件。但正如 Neil Butterworth 所指出的,Linus并不是特别 喜欢 C++,而且这再次成为可能的可能性为零。
EKOPath 4 编译器,不是现在。但可能有一些小补丁
我现在正在使用 Open64 为 MIPS 架构编译 Linux 内核,而其他一些人现在正在为使 Open64 可以为 X86 架构构建而工作。现在内核可以部分运行,但仍然有运行失败错误。
但是对于原子问题,至少我还没有想出它。而且我不认为这真的是一个问题。原因是:
Linux内核已经是源代码的集合,可以用GCC成功构建,所以如果不能构建,或者构建的内核运行失败,只是编译器的问题。
编译器要想成功构建Linux内核,就应该遵守GNU C Extension,而这个扩展会明确说明什么是原子操作,所以这样的编译只需要根据这个扩展生成代码即可。
我的非技术猜测: Linux 内核目前(2009 年)不能用 GNU 编译器gcc以外的任何编译器编译。
我这么说是因为我听过 Richard Stallman 有一定的信念,他说Linux应该被称为GNU/Linux,因为内核“只是操作系统的一部分”,我猜他不会能够如果内核不依赖于 GNU(例如,大量嵌入式设备在没有任何 GNU 软件的情况下运行 Linux 操作系统),请这样说。
正如我所说,只是一个猜测,如果我错了,请告诉我......