首页 > 解决方案 > g++ 编译器使用 -std=c++11 标志给我错误,但使用 -std=gnu++11 可以正常编译。这是什么意思?

问题描述

我正在维护一个正在运行的旧服务器,CentOS6(gcc (GCC) 4.4.7, C++98) 我试图CentOS7(gcc (GCC) 4.8.5)用 C++11 将它迁移到它。

起初,我尝试使用标志进行编译,-std=c++11但它给了我很多错误,如下所示。

`In file included from /usr/lib/gcc/x86_64-redhat-linux/4.8.5/include/x86intrin.h:30:0,
                 from /usr/include/c++/4.8.2/x86_64-redhat-linux/bits/opt_random.h:33,
                 ...
/usr/lib/gcc/x86_64-redhat-linux/4.8.5/include/mmintrin.h: In function ‘__m64_mm_cvtsi32_si64(int)’:
/usr/lib/gcc/x86_64-redhat-linux/4.8.5/include/mmintrin.h:61:54: error: can’t convert between vector values of different size
   return (__m64) __builtin_ia32_vec_init_v2si (__i, 0);
                                                      ^
/usr/lib/gcc/x86_64-redhat-linux/4.8.5/include/mmintrin.h: In function ‘int _mm_cvtsi64_si32(__m64)’:
/usr/lib/gcc/x86_64-redhat-linux/4.8.5/include/mmintrin.h:104:53: error: cannot convert ‘__m64 {aka int}’ to ‘__vector(2) int’ for argument ‘1’ to ‘int __builtin_ia32_vec_ext_v2si(__vector(2) int, int)’
   return __builtin_ia32_vec_ext_v2si ((__v2si)__i, 0);`

不知何故,我遇到了使用标志,-std=gnu++11它工作得很好。

我能用这个假设什么?这是否意味着旧的服务器代码以某种方式使用 gnu 扩展或其他什么?

标签: c++c++11gcc

解决方案


推荐阅读