Вопрос или проблема
Я пытаюсь собрать 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
-
Недостающие библиотеки: Ошибка указывает на то, что GCC не может найти динамическую библиотеку
libgcc_s.so.1
. Эта библиотека обычно устанавливается вместе с GCC. Если вы собираете GCC вручную, она может отсутствовать в заранее заданных местах поиска библиотек. -
Пути к библиотекам: Убедитесь, что ваши пути к библиотекам, которые вы указали при конфигурации, правильно ссылаются на установленные версии
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. Убедитесь, что все пути и зависимости настроены корректно. Если проблема все еще не решена, рассмотрите возможность поиска дополнительных ошибок в выводах команд, чтобы выявить иные проблемы с конфигурацией или зависимостями.