Вопрос или проблема
Я использую Ubuntu 20.04.6 LTS, и у меня была следующая ошибка при использовании git:
/usr/lib/git-core/git-remote-https: ошибка поиска символа: /lib/x86_64-linux-gnu/libgnutls.so.30: неопределённый символ: __gmpz_limbs_write
Изучив некоторые похожие вопросы, я проверил зависимости libgnutls.so.30
, которая является гиперссылкой на /lib/x86_64-linux-gnu/libgnutls.so.30.27.0
:
ldd /lib/x86_64-linux-gnu/libgnutls.so.30
linux-vdso.so.1 (0x00007ffef73f2000)
libp11-kit.so.0 => /lib/x86_64-linux-gnu/libp11-kit.so.0 (0x00007f8173d92000)
libidn2.so.0 => /lib/x86_64-linux-gnu/libidn2.so.0 (0x00007f8173d71000)
libunistring.so.2 => /lib/x86_64-linux-gnu/libunistring.so.2 (0x00007f8173bef000)
libtasn1.so.6 => /lib/x86_64-linux-gnu/libtasn1.so.6 (0x00007f8173bd9000)
libnettle.so.7 => /lib/x86_64-linux-gnu/libnettle.so.7 (0x00007f8173b9f000)
libhogweed.so.5 => /lib/x86_64-linux-gnu/libhogweed.so.5 (0x00007f8173b68000)
libgmp.so.10 => /lib/x86_64-linux-gnu/libgmp.so.10 (0x00007f8173ae2000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f81738f0000)
/lib64/ld-linux-x86-64.so.2 (0x00007f81740b5000)
libffi.so.7 => /lib/x86_64-linux-gnu/libffi.so.7 (0x00007f81738e4000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f81738de000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f81738bb000)
И я смог отследить до libgmp.so.10 => /lib/x86_64-linux-gnu/libgmp.so.10
.
Что мне делать с libgmp
, который вызвал проблему?
libgmp.so.10.4.0
указывает на /lib/x86_64-linux-gnu/libgmp.so.10.4.0
.
И вот версия Git 2.25.1
Ответ или решение
Решение проблемы с ошибкой символа в Git на Ubuntu 20.04.6
Вам стало известно о проблеме при использовании Git на Ubuntu 20.04.6 LTS, связанной с ошибкой символа, которая проявляется следующим образом:
/usr/lib/git-core/git-remote-https: symbol lookup error: /lib/x86_64-linux-gnu/libgnutls.so.30: undefined symbol: __gmpz_limbs_write
И данная ошибка указывает на конфликт или некорректную загрузку библиотеки libgmp
, которая используется libgnutls
.
Шаг 1: Диагностика проблемы
Первый шаг в решении проблемы — это убедиться в корректности установки библиотек и их версий. При анализе зависимостей libgnutls.so.30
вы заметили, что одна из библиотек, от которой она зависит, — это libgmp.so.10
. Однако символ __gmpz_limbs_write
, который вызывается из libgmp
, не удалось обнаружить. Это может происходить из-за разных причин:
- Устаревшая версия
libgmp
. - Убедиться, что установленные версии библиотек соответствуют друг другу.
Шаг 2: Обновление библиотеки libgmp
Чтобы обновить библиотеку libgmp
, выполните следующие команды в терминале:
sudo apt update
sudo apt upgrade libgmp10
Эти команды обновят вашу систему и библиотеку libgmp
до последней стабильной версии из репозиториев Ubuntu.
Шаг 3: Проверка и переустановка GnuTLS и Git
Иногда проблема может быть также связана с несовместимостью между версиями libgmp
, libgnutls
и git
. Поэтому имеет смысл переустановить пакеты gnutls
и git
. Выполните:
sudo apt remove --purge libgnutls30 git
sudo apt install libgnutls30 git
Эти команды сначала удалят, а затем установят библиотеки заново. Это гарантирует, что у вас будут установлены последние версии, что может решить конфликт.
Шаг 4: Проверка зависимостей
После переустановки библиотек убедитесь, что соответствия всех зависимостей теперь корректные. Запустите команду проверки зависимостей:
ldd /usr/lib/git-core/git-remote-https
Эта команда покажет, все ли зависимости правильно загружены и присутствуют ли они в системе.
Шаг 5: Перезагрузка системы
Наконец, если ошибка всё еще возникает, перезагрузите систему, чтобы убедиться, что все изменения вступили в силу.
sudo reboot
Заключение
Ошибки с символами в библиотеке часто возникают из-за несовместимых версий или повреждённых библиотек. Обновление и переустановка соответствующих пакетов, включая libgmp
и другие зависимости, решает большинство проблем. Такие действия гарантируют, что ваше программное обеспечение работает без сбоев. Если после всех выполненных шагов ошибка всё ещё сохраняется, имеет смысл обратиться на форумы поддержки Ubuntu или Git для более глубокого анализа проблемы.
Если у вас возникнут дополнительные вопросы или сложности, не стесняйтесь задавать их!