#c #gcc
Вопрос:
Итак, я попытался выполнить очень точную математику на C, используя a __float128
-type.
Мой код выглядит примерно так:
#include <stdio.h>
int main() {
__float128 num;
}
Я попытался скомпилировать его без каких-либо параметров, подобных этому:
gcc -o test test.c
Ошибка, которую я получаю, это:
test.c:4:5: error: __float128 is not supported on this target
Мой gcc был установлен с помощью Homebrew на Macbook x86.
Комментарии:
1. Библиотеки — это больше, чем просто заголовки. Заголовок — это просто список материалов, которые есть в библиотеке. Это не настоящая библиотека.
2. Вы используете Intel (x86) Mac или Apple Silicon (ARM) Mac?
3. @JosephSible-Переустановите Monica Я использую MacBook Air x86 с 2019 года.
4. Подождите минутку. Libquadmath не предоставляет __float128; это зависит от того, что он уже доступен. Есть ли что-нибудь, что вы на самом деле используете из libquadmath? Что произойдет, если вы просто удалите
#include <quadmath.h>
?5. @JosephSible-Переустановить MONICA
test.c:4:5: error: __float128 is not supported on this target
Ответ №1:
Мой gcc был установлен с помощью Homebrew на Macbook x86.
Возможно, вы это сделали, но gcc
то, что вы запустили для компиляции вашей тестовой программы, на самом деле является Apple clang, замаскированным под GCC, как вы увидите, если сделаете gcc -v
. Apple clang не поддерживает __float128, но настоящий GCC поддерживает. Сделайте /usr/local/bin/gcc-11 -o test test.c
это, чтобы использовать реальный GCC, который вы установили, и тогда он должен успешно скомпилироваться.
Комментарии:
1. Теперь это говорит мне об этом
In file included from test.c:1: /usr/local/Cellar/gcc/11.2.0/lib/gcc/11/gcc/x86_64-apple-darwin21/11.2.0/include-fixed/stdio.h:78:10: fatal error: _stdio.h: No such file or directory
.2. @gurkensaas Попробуйте повторить
xcode-select --install
.3. @gurkensaas Чтобы использовать libquadmath, просто включить заголовок недостаточно. Вам также нужно добавить
-lquadmath
в конец командной строки GCC.4. @gurkensaas Вы не можете перезаписать строковый литерал. Вы бы хотели сделать
char str[11]; quadmath_snprintf(str, 11, "%Qg", num);
вместо этого.5. @gurkensaas но, пожалуйста, не указывайте
11
буквально в аргументах, используйтеsizeof str
. В противном случае изменение размераstr
потребует от вас редактирования значения по крайней мере в двух местах, некоторые из которых вы можете забыть обновить. См. Также Принцип DRY .