Вопрос или проблема
Я пытаюсь собрать 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
Все необходимые библиотеки были собраны и установлены в указанные подкаталоги ~/opt
, и я подтвердил, что у меня действительно есть $HOME/opt/isl/lib/libisl.so.23
. Так почему я получаю эту ошибку?
Ответ или решение
Ошибка «libisl.so.23: cannot open shared object file: No such file or directory» при сборке GCC 12.4.0 на Oracle Linux 9.4 указывает на то, что компилятор не может найти динамическую библиотеку libisl.so.23, которая должна быть предоставлена одним из ваших установленных зависимых пакетов. Давайте разберемся с этой проблемой более подробно.
Причины проблемы
-
Несоответствие путей:
Вы упоминаете, что вы установили библиотеки в подкаталоги, такие как~/opt/isl/lib
. Однако, для того чтобы компилятор мог найти данную библиотеку, необходимо убедиться, что путь до указанной библиотеки добавлен в переменные окружения. -
Библиотечные зависимости:
Библиотеки, особенно динамические, могут не обнаруживаться системой, если их путь не был зарегистрирован их загрузчиком динамических библиотек. Обычно это происходит из-за отсутствия пути в переменнойLD_LIBRARY_PATH
.
Решение проблемы
-
Проверьте наличие библиотеки:
Убедитесь, что файлlibisl.so.23
действительно существует в папке~/opt/isl/lib
и что он имеет правильные права доступа. Если его нет, возможно, вам нужно пересобрать ISL и убедиться, что он установлен правильно.ls -l ~/opt/isl/lib/libisl.so.23
-
Установите путь к библиотекам:
Для того чтобы компилятор мог находить динамические библиотеки, вам нужно указать путь вLD_LIBRARY_PATH
. Это делается следующим образом:export LD_LIBRARY_PATH=$HOME/opt/isl/lib:$LD_LIBRARY_PATH
Добавьте эту строку в ваш файл конфигурации оболочки (например,
.bashrc
или.bash_profile
), чтобы этот путь загружался автоматически при открытии терминала. -
Проверка конфигурации и перезапуск:
После установки переменной окружения попробуйте снова запустить конфигурационную команду GCC и затем сборку:./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 make
-
Проверка установленных библиотек:
Убедитесь, что другие библиотеки GMP, MPFR и MPC также правильно установлены и находятся в путях, указанных в конфигурации. Это можно сделать аналогичным образом, добавив их пути вLD_LIBRARY_PATH
. -
Запустить ldconfig (если возможно):
Если у вас есть доступ к выполнению команд с правами администратора, можно добавить пути к вашим библиотекам в/etc/ld.so.conf.d
и выполнить командуldconfig
, чтобы обновить кэш библиотек, однако это требует прав суперпользователя.
Заключение
После выполнения указанных рекомендаций вы должны успешно собрать GCC 12.4.0 без ошибок, связанных с библиотекой libisl.so.23
. Если проблема продолжает возникать, рекомендуется также проверить журнал сборки на наличие дополнительных указаний относительно других проблем со зависимостями. Удачи в сборке!