При сборке GCC 12.4 возникает ошибка: /usr/bin/ld: не удается найти /lib/libgcc_s.so.1

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

Я пытаюсь собрать GCC 12.4.0 на Oracle Linux 9.4 (извините за это… это не мой выбор дистрибутива) как пользователь без прав root. Я скачал и собрал все необходимые зависимости: gmp, mpfr, mpc, isl, установив их в отдельные директории. Теперь я пытаюсь:

./configure --disable-ada --disable-gnat --disable-fortran --disable-bootstrap \
    --disable-bootstrap --enable-languages=c,c++  \
    --prefix=$HOME/opt/versions/gcc/12.4.0 --with-gmp=$HOME/opt/gmp \
    --with-mpfr=$HOME/opt/mpfr --with-mpc=$HOME/opt/mpc --with-isl=$HOME/opt/isl

но это приводит к следующему:

--- snip ---
/home/lh156516/src/gcc/gcc-12.4.0/host-x86_64-pc-linux-gnu/gcc/xgcc -B/home/lh156516/src/gcc/gcc-12.4.0/host-x86_64-pc-linux-gnu/gcc/ -xc -nostdinc /dev/null -S -o /dev/null -fself-test=../.././gcc/testsuite/selftests
/home/lh156516/src/gcc/gcc-12.4.0/host-x86_64-pc-linux-gnu/gcc/xgcc -B/home/lh156516/src/gcc/gcc-12.4.0/host-x86_64-pc-linux-gnu/gcc/ -xc++ -nostdinc /dev/null -S -o /dev/null -fself-test=../.././gcc/testsuite/selftests
/home/lh156516/src/gcc/gcc-12.4.0/host-x86_64-pc-linux-gnu/gcc/cc1: ошибка при загрузке общих библиотек: libisl.so.23: не удается открыть общий объектный файл: Нет такого файла или каталога
make[2]: *** [../.././gcc/c/Make-lang.in:128: s-selftest-c] Ошибка 1
make[2]: *** Ожидание незавершенных заданий....
/home/lh156516/src/gcc/gcc-12.4.0/host-x86_64-pc-linux-gnu/gcc/cc1plus: ошибка при загрузке общих библиотек: libisl.so.23: не удается открыть общий объектный файл: Нет такого файла или каталога
make[2]: *** [../.././gcc/cp/Make-lang.in:206: s-selftest-c++] Ошибка 1
make[1]: *** [Makefile:4619: all-gcc] Ошибка 2
make: *** [Makefile:1034: all] Ошибка 2

Я подтвердил, что у меня действительно есть $HOME/opt/isl/lib/libisl.so.23. Так почему я получаю эту ошибку?

Ответ или решение

Когда вы пытаетесь собрать GCC 12.4.0 на базе Oracle Linux 9.4 и сталкиваетесь с ошибкой /usr/bin/ld: cannot find /lib/libgcc_s.so.1, это свидетельствует о том, что компилятор не может найти необходимую библиотеку libgcc_s.so.1. Это может быть вызвано несколькими факторами, которые мы рассмотрим в этом ответе.

Проблема с библиотекой libgcc_s.so.1

  1. Недостающие библиотеки: Ошибка указывает на то, что GCC не может найти динамическую библиотеку libgcc_s.so.1. Эта библиотека обычно устанавливается вместе с GCC. Если вы собираете GCC вручную, она может отсутствовать в заранее заданных местах поиска библиотек.

  2. Пути к библиотекам: Убедитесь, что ваши пути к библиотекам, которые вы указали при конфигурации, правильно ссылаются на установленные версии gmp, mpfr, mpc, и isl. Путь к библиотеке libgcc_s.so.1 может не совпадать с тем, что ожидается системой.

Решение проблемы

Решение проблемы состоит из нескольких шагов:

1. Убедитесь, что libgcc_s.so.1 установлена

Первым делом стоит проверить, установлена ли библиотека libgcc_s.so.1. Выполните команду:

find / -name libgcc_s.so.1 2>/dev/null

Если библиотека отсутствует, вам необходимо установить GCC или загрузить ее вручную.

2. Установка необходимых библиотек

Если GCC не был правильно установлен, вы можете использовать пакетный менеджер для установки зависимостей:

sudo yum install gcc

Убедитесь, что вы используете версию GCC, которая соответствует вашим требованиям.

3. Параметры конфигурации

Если libgcc_s.so.1 установлена, убедитесь, что правильные пути указаны при конфигурации. Вы можете добавить путь к библиотекам в переменную окружения LD_LIBRARY_PATH:

export LD_LIBRARY_PATH=$HOME/opt/versions/gcc/12.4.0/lib:$LD_LIBRARY_PATH

Запустите снова процесс конфигурации:

./configure --disable-ada --disable-gnat --disable-fortran --disable-bootstrap \
    --enable-languages=c,c++ --prefix=$HOME/opt/versions/gcc/12.4.0 \
    --with-gmp=$HOME/opt/gmp --with-mpfr=$HOME/opt/mpfr --with-mpc=$HOME/opt/mpc --with-isl=$HOME/opt/isl

Убедитесь, что указанные пути действительно существуют и что библиотеки доступны.

4. Проверка и установка всех зависимостей

Иногда при сборке GCC могут возникать проблемы с другими зависимостями. Убедитесь, что все необходимые зависимости (такие как gmp, mpfr, mpc) находятся в корректных директориях, и при сборке GCC они ссылаются на эти библиотеки.

5. Проверка конфигурации динамических библиотек

Вы можете использовать утилиту ldconfig, чтобы обновить кэш динамических библиотек:

sudo ldconfig

Это поможет системе обнаружить новую библиотеку libgcc_s.so.1, если она была только что установлена или перемещена.

Заключение

Каждая из этих рекомендаций может помочь вам устранить ошибку, связанную с отсутствием библиотеки libgcc_s.so.1 при сборке GCC 12.4 на Oracle Linux 9.4. Убедитесь, что все пути и зависимости настроены корректно. Если проблема все еще не решена, рассмотрите возможность поиска дополнительных ошибок в выводах команд, чтобы выявить иные проблемы с конфигурацией или зависимостями.

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

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