我正在从KEIL OS移植相当老的C(和一点C ++)代码基础到Linux 32位。
当使用gcc / g ++ 6.3到6.5进行编译时,它工作正常,当尝试使用gcc> 7.0进行相同操作(在ubuntu 18.04上用7.3和8.2测试)时,出现编译错误:
/usr/include/bits/floatn-common.h:207:15: error: two or more data types in declaration specifiers
typedef float _Float32;
^~~~~~~~
/usr/include/bits/floatn-common.h:244:16: error: two or more data types in declaration specifiers
typedef double _Float64;
^~~~~~~~
/usr/include/bits/floatn-common.h:261:16: error: two or more data types in declaration specifiers
typedef double _Float32x;
^~~~~~~~~
/usr/include/bits/floatn-common.h:278:21: error: two or more data types in declaration specifiers
typedef long double _Float64x;
编译器头文件(/usr/include/bits/floatn-common.h:261:16
)包含以下部分:
# if __HAVE_FLOAT32
# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
typedef float _Float32;
# endif
# if !__GNUC_PREREQ (7, 0)
# define __builtin_huge_valf32() (__builtin_huge_valf ())
# define __builtin_inff32() (__builtin_inff ())
# define __builtin_nanf32(x) (__builtin_nanf (x))
# define __builtin_nansf32(x) (__builtin_nansf (x))
# endif
# endif
告诉我这只与gcc > 7.0
与该错误有关的大多数问题都缺少“;”在结构中或执行类似的操作
void int myFunction(void){}
尽管我认为不是这种情况,因为它出现在不同的编译单元中,并且可以与gcc/g++
的早期版本一起使用
using glibc version 2.2
7
我的问题:有没有办法禁用此新的编译器功能,或者最终从社区中提示从哪里开始搜索
答案 0 :(得分:0)
发现了问题:
在源代码中的某个地方有一个
#undef __GNUC__
这是由损坏的代码生成工具产生的...
这样做,将math.h或wchar.h的所有内容都破坏了...