是否可以使用英特尔的编译器而不是GCC来编译完整的Linux系统?


26

也许存在一些兼容性问题?

我的印象是,对于基于Intel的系统,Intel编译器可能比GCC做得更好。也许已经有一个发行版尝试了这种方法?

我认为使用Gentoo可能很简单。


4
我应该在这里找到一些不错的信息! gentoo-wiki.info/HOWTO_ICC_and_Portage
barrymac 2011年

5
我想知道您的前提:您如何衡量哪个编译器“可以做得更好”?更快的代码执行?较小的二进制文件?更快的编译时间?
伊莱·海蒂

1
我会先评估更快的代码,然后评估较小的二进制文件,但是除非二进制文件非常引人注目,否则它不会真正关心二进制文件的大小。也许另一个问题可能是能源效率
barrymac

Answers:


29

您将无法使用icc编译所有内容。那里的许多程序都使用C语言的GCC扩展。但是,英特尔为支持大多数这些扩展做出了很多努力。例如,最新版本的icc可以编译Linux内核。

如果您想以一种不寻常的方式重新编译软件,Gentoo确实是您的最佳选择。在对Gentoo的维基页面ICC描述了主要障碍。

首先进行基本的Gentoo安装,然后emerge icc。只要您在系统上用icc编译了任何二进制文件,就不要以后删除icc。请注意,icc安装在/opt; 中。如果该文件不在您的根分区上,则在引导时使用的任何程序都是使用icc编译的,则需要将icc库复制到您的根分区中。

设置/etc/portage/bashrc并声明您喜欢的编译选项;请参阅Gentoo Wiki,以获得更详尽的脚本,该脚本支持使用不同的编译器构建不同的软件包(这是必需的,因为icc破坏了某些软件包)。

export OCC="icc" CFLAGS="-O2 -gcc"
export OCXX="icpc" CXXFLAGS="$CFLAGS"
export CC_FOR_BUILD="${OCC}"

13

这肯定是一个有趣的经历。但是,使用替代编译器重新编译整个Linux发行版并不是一件容易的事。许多基本软件包都依赖于GCC和其他GNU工具链实用程序。

对于那些不需要GCC创建混合程序的软件包,可以使用替代编译器。可能有可能将GCC依赖的软件包替换为将由您的编译器生成的其他软件包,但是在大多数情况下,没有太多选择。如果存在,则必须确定这些替代方案是否对您的预期用途有效。

真正的问题是:是否值得?如果您尝试构建嵌入式系统,则其他编译器可能会生成较小的二进制文件。如果您要构建计算集群,则可以更快地执行代码。如果要构建台式机,您将获得出色的学习经验。

我认为最后(假设您正在构建桌面),您会发现许多源发行版用户最终决定是正确的:优化,构建和重建所花费的时间远远超过了更快的代码执行所节省的时间。这并不是说不应该这样做-这可能很有趣。如果您这样做,此站点将是寻找答案和记录您的努力的好地方。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.