Вопрос или проблема
Я пытаюсь собрать GCC 12.4.0 на Oracle Linux 9.4 (извините за это… это не мой выбор дистрибутива) в качестве пользователя без прав администратора. Итак, я скачал и собрал все необходимые зависимости: 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
Все необходимые библиотеки были собраны и установлены в указанные подкаталоги ~/opt
, и я проверил, что у меня действительно есть $HOME/opt/isl/lib/libisl.so.23
. Так почему же я получаю эту ошибку?
Ответ или решение
При сборке GCC 12.4.0 на Oracle Linux 9.4 вы столкнулись с ошибкой, связанной с отсутствием файла libisl.so.23
. Давайте рассмотрим проблему более подробно и предложим возможные пути её решения.
Понимание Проблемы
Сообщение об ошибке указывает на то, что во время компиляции GCC его компоненты не могут найти библиотеку libisl.so.23
. Несмотря на то, что вы подтвердили наличие этой библиотеки в каталоге, указанном в вашем пути установки, проблема может заключаться в неправильном указании местоположения библиотек во время процесса сборки.
Возможные Причины Ошибки
-
Проблемы с динамическими библиотеками: Во время выполнения программы динамические библиотеки загружаются с использованием переменной окружения
LD_LIBRARY_PATH
. Если указанный путь к библиотекеlibisl.so.23
не входит в это окружение, GCC не сможет её найти. -
Отсутствие корректных ссылок: Несмотря на то, что файл библиотеки может существовать, система может не знать о его наличии. Это может произойти, если система не обновила кэш динамических библиотек.
-
Неправильный путь при конфигурации: Некорректные пути к библиотекам в параметрах конфигурации могут также приводить к тому, что GCC не найдет нужные файлы.
Рекомендации по Решению
-
Настройка LD_LIBRARY_PATH:
Убедитесь, что путь~/opt/isl/lib
добавлен в переменную окруженияLD_LIBRARY_PATH
. Это можно сделать следующим образом:export LD_LIBRARY_PATH=$HOME/opt/isl/lib:$LD_LIBRARY_PATH
-
Обновление кэша динамических библиотек:
Если вы используете систему, поддерживающуюldconfig
, добавьте свой путь к библиотекам в файл конфигурации и выполните команду:echo "$HOME/opt/isl/lib" > /etc/ld.so.conf.d/isl.conf ldconfig
Однако это требует прав администратора и может быть недоступно для вас как для пользователя без прав root.
-
Проверка корректности установки ISL:
Убедитесь, что библиотекаlibisl.so.23
правильно установлена. Вы можете проверить наличие символических ссылок, которые могут указывать на файл:ls -l $HOME/opt/isl/lib/libisl*
-
Перепроверка параметров конфигурации:
Убедитесь, что все параметры, указанные в команде./configure
, правильные. Проверьте пути к библиотекам и их наличие:./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
-
Проверка наличия всех зависимостей:
Убедитесь, что у вас установлены все необходимые зависимости для сборки GCC. Пивотируйте статусlibisl
, чтобы удостовериться, что версия и архитектура совместимы.
Заключение
Сборка GCC может быть сложным процессом, особенно когда речь идет о правильном указании всех зависимостей. Надеюсь, предложенные рекомендации помогут вам успешно устранить проблему с отсутствующей библиотекой libisl.so.23
. Если после выполнения этих шагов ошибка всё ещё остается, стоит исследовать другие логи сборки для получения дополнительной информации и возможных индикаторов проблемы.