Вопрос или проблема
Я пытаюсь собрать GLIBC из исходников, однако в процессе получения следующей ошибки:
../sysdeps/ieee754/flt-32/e_gammaf_r.c: В функции ‘__ieee754_gammaf_r’:
../sysdeps/ieee754/flt-32/e_gammaf_r.c:127:32: ошибка: неявное объявление функции ‘__builtin_roundeven’; вы имели в виду ‘__builtin_round’? [-Werror=implicit-function-declaration]
double m = z - 0x1.7p+1, i = __builtin_roundeven(m), step = __builtin_copysign(1.0,i);
^~~~~~~~~~~~~~~~~~~
__builtin_round
cc1: все предупреждения рассматриваются как ошибки
Я попробовал собрать, используя следующее:
git clone https://sourceware.org/git/glibc.git glibc-devel
cd glibc-devel
mkdir build
cd build
../configure --prefix=/home/a0504063/bin/python/glibc --host=x86_64-linux-gnu --build=x86_64-linux-gnu CC="gcc -m64" CXX="g++ -m64" CFLAGS="-O2 -Wno-error" CXXFLAGS="-O2 -Wno-error"
make
Это приводит к указанной выше ошибке. Как показано в команде configure, я использую -Wno-error
, чтобы попытаться подавить поведение по умолчанию “все предупреждения рассматриваются как ошибки”. Однако, эта опция добавляется в начало списка опций по умолчанию, что приводит к ее игнорированию.
В настоящее время я использую:
- git commit hash:
18596c5415
- gcc/g++ версия: 8.5.0
- ОС: RedHat 8 (это то, на чем работают серверы компании, и у меня нет возможности изменить)
Ответ или решение
Ошибка компиляции GLIBC: Неявное объявление функции
При попытке компиляции GLIBC из исходников, вы столкнулись с ошибкой, связанной с неявным объявлением функции __builtin_roundeven
. Эта проблема может возникнуть по нескольким причинам, и для её исправления необходимо рассмотреть несколько аспектов процесса компиляции и конфигурации вашей среды.
1. Понимание ошибки
Ошибка, которую вы видите:
error: implicit declaration of function ‘__builtin_roundeven’; did you mean ‘__builtin_round’? [-Werror=implicit-function-declaration]
указывает на то, что компилятор не распознает функцию __builtin_roundeven
, что может означать, что эта функция недоступна в используемой версии компилятора или не была правильно определена в заголовочных файлах.
2. Проблема с компилятором
Вы используете GCC версии 8.5.0. Функция __builtin_roundeven
была введена в более поздних версиях компилятора. Если в вашей системе установлена устаревшая версия GCC, это может быть причиной ошибки. Проверьте, поддерживается ли эта функция в вашей версии компилятора:
- Задайте команду:
gcc -dM -E - < /dev/null | grep __builtin_roundeven
Если функция не найдена, это подтверждает отсутствие поддержки.
3. Настройки конфигурации
При выполнении команды configure
вы добавили опцию -Wno-error
, однако она была проигнорирована. Чтобы это исправить, рекомендуется более явно указать все флаги компиляции, а также убрать предупреждения, которые могут вызывать ошибки.
Попробуйте изменить конфигурацию следующим образом:
../configure --prefix=/home/a0504063/bin/python/glibc --host=x86_64-linux-gnu --build=x86_64-linux-gnu CC="gcc -m64 -Wno-error" CXX="g++ -m64 -Wno-error"
4. Решение проблемы с версией GCC
Если текущая версия GCC не поддерживает __builtin_roundeven
, рассмотрите следующие пути:
-
Обновление компилятора: Если это возможно, установите более новую версию GCC (9.x или выше) на вашу систему. Это лучшее долгосрочное решение, так как поддержка новых функций будет обеспечиваться.
-
Использование системного GCC: Если у вас есть доступ к альтернативным версиям компилятора (например, более новым), попробуйте переключиться на них. В некоторых дистрибутивах можно установить разные версии GCC через пакетный менеджер.
5. Альтернативные обходные пути
Если по каким-то причинам изменения конфигурации и обновления компилятора невозможны, можно попробовать закомментировать использование функции __builtin_roundeven
в исходном коде файла, который вызывает ошибку. Это может быть временным решением, но оно требует понимания кода и возможных последствий для функциональности библиотеки.
6. Заключение
Для успешной компиляции GLIBC рекомендуется использовать поддерживаемую версию GCC, соответствующую всем требованиям к функциям, на которые ссылается код. Убедитесь, что все параметры конфигурации установлены корректно, и протестируйте процесс компиляции с обновлённой версией компилятора. Если возникнут дополнительные проблемы, подробные сообщения об ошибках могут дать подсказку для дальнейшей диагностики.
В случае трудностей в дальнейшем, может быть полезно обратиться к документации GLIBC или сообществу разработчиков за помощью. Это улучшит понимание процесса и решит текущие проблемы.