Ошибка компиляции GLIBC: Неявное объявление функции

Вопрос или проблема

Я пытаюсь собрать 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 или сообществу разработчиков за помощью. Это улучшит понимание процесса и решит текущие проблемы.

Оцените материал
Добавить комментарий

Капча загружается...