centos最小发行版包含gcc吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了centos最小发行版包含gcc吗相关的知识,希望对你有一定的参考价值。

参考技术A centos最小化安装版,这个版本默认是没有gcc-c++编译环境。由于公司服务器操作系统大多是更适合用做server的centos最小化安装版,这个版本默认是没有gcc-c++编译环境的,需要安装源码包软件时不能使用make编译,服务器基本上都是内网,无法连接外网,只能离线安装。本文使用centos6.5离线安装gcc-c++,centos其他版本安装也是一样的,只是需要的包版本不同。

发行版将 GCC 升级到 5.5.0 后,AVX512 内在函数头会产生许多错误

【中文标题】发行版将 GCC 升级到 5.5.0 后,AVX512 内在函数头会产生许多错误【英文标题】:AVX512 intrinsics header produces many errors after distro upgrades GCC to 5.5.0 【发布时间】:2018-06-12 10:35:20 【问题描述】:

我的 Linux 发行版将我的 GCC 版本升级到了 5.5.0(如果我知道为什么,该死的)。现在,当我尝试构建包含 avx512fintrin.h 的代码时,我得到了一系列编译器错误:

/usr/lib/gcc/x86_64-linux-gnu/5/include/avx512fintrin.h(9220): error: argument of type "const void *" is incompatible with parameter of type "const float *"
/usr/lib/gcc/x86_64-linux-gnu/5/include/avx512fintrin.h(9231): error: argument of type "const void *" is incompatible with parameter of type "const float *"
/usr/lib/gcc/x86_64-linux-gnu/5/include/avx512fintrin.h(9244): error: argument of type "const void *" is incompatible with parameter of type "const double *"
/usr/lib/gcc/x86_64-linux-gnu/5/include/avx512fintrin.h(9255): error: argument of type "const void *" is incompatible with parameter of type "const double *"

等等。为什么会发生这种情况,有没有办法(希望不是太具体的分布)来解决或规避这个问题?

PS - 以防万一,我使用 GNU/Linux Mint 18.3。

【问题讨论】:

gcc7.3 还不错;如果您需要手动升级 gcc,我建议您这样做。 gcc7 有一些不错的东西,比如存储合并(使用一条 mov 指令完成相邻的窄存储),非常适合具有窄成员的结构。 @PeterCordes:我说的是我的发行版的默认值。当然,我可以在相关时使用另一个版本的 GCC - 但你不能真正“升级” - 所有编译的库都是使用发行版默认版本构建的。 编译器升级不会更改 C ABI,因此您可以使用更新的编译器而无需重新构建系统库。不过,关于 C++ABI 的 IDK。 gcc5 已经很老了,所以如果你真的在使用 AVX512,你可能想要一个更新的 gcc 来获得更好的代码生成。 @PeterCordes:想想 CUDA 8。 【参考方案1】:

显然,这涉及到一个 GCC 错误:

Bug 76731 - [AVX512] _mm512_i32gather_epi32 and other scatter/gather routines have incorrect signature

似乎 GCC 5.5 附带了一些 avx512?intrin.h 标头,这些标头切换到使用 void*const void*, 但没有切换内置函数来执行相同操作。这在 GCC 5 的发布后版本中得到了解决。关于 GCC 6.x - 我不确定。

this forum thread 讨论了解决此问题的方法:从 GNU 服务器下载已修补的标头。

用于 GCC 5 的 Shell 脚本(在 Linux 系统上):

for f in avx512fintrin.h avx512pfintrin.h avx512vlintrin.h; do
   curl -H "User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36" -o $f "https://gcc.gnu.org/viewcvs/gcc/branches/gcc-5-branch/gcc/config/i386/$f?view=co&revision=245536&content-type=text%2Fplain&pathrev=245536"
done && mv avx512*intrin.h  /usr/lib/gcc/x86_64-linux-gnu/5/include/

实际上,所有 3 个版本的文件可能都相同,但我没有检查。

注意:如果您想知道为什么使用用户代理字符串 - 这是为了避免服务器拒绝客户端,它不喜欢“禁止”响应。当然不一定非得是这个特定的 UA 字符串。

【讨论】:

这应该被向后移植到 gcc5

以上是关于centos最小发行版包含gcc吗的主要内容,如果未能解决你的问题,请参考以下文章

主要几个发行版的 gcc 对 c++ 新标准的支持情况区别

发行版将 GCC 升级到 5.5.0 后,AVX512 内在函数头会产生许多错误

最简单的斐讯p1(斐讯n1)电视盒子刷centos7系统(其他linux发行版如armbian也行)教程,对盒子内的安卓系统改动最小

将 GCC 版本升级到发行版附带的版本之外是不是有任何问题?

Red hat、Centos、Suse、Ubantu这几款linux发行版有啥不同,最大的区别在哪?

CentOS 7.5 正式发布 基于 RHEL 的安全稳定发行版