Я портирую довольно старый C (и немного C ++) код из ОС KEIL в 32-битную версию Linux.
При компиляции с gcc / g ++ с 6.3 до 6.5 все работает нормально, при попыткесделать то же самое с gcc> 7.0 (протестировано с 7.3 и 8.2 на Ubuntu 18.04) Я получаю ошибки компиляции:
/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
Мой вопрос: есть ли способ отключить эту новую функцию компилятора или, в конце концов, намек от сообщества, где начать поиск