Вопрос или проблема
Я недавно обновил свой ноутбук до версии 24.04 и не могу запустить программный пакет. Появляется следующая ошибка:
ошибка при загрузке общих библиотек: libicui18n.so.70: не удается открыть файл разделяемой библиотеки: Нет такого файла или каталога
Вам нужна libicu70
. Версия libicu
в Ubuntu 24 — libicu74
.
Просто скачайте libicu70.deb
вручную и установите его с помощью dpkg.
Вы можете найти ссылку на Launchpad Ubuntu icu package 70.1-2.
Я предполагаю, что вы используете машину amd64.
wget https://launchpad.net/ubuntu/+source/icu/70.1-2/+build/23145450/+files/libicu70_70.1-2_amd64.deb
sudo dpkg -i libicu70_70.1-2_amd64.deb
Вам нужно посетить страницу выпуска ICU (International Components for Unicode) и найти нужную вам версию.
Предположим, что вам нужна версия 70.
https://github.com/unicode-org/icu/releases/tag/release-70-rc
Выберите вашу платформу.
Я буду использовать Ubuntu (icu4c-70rc-Ubuntu-20.04-x64.tgz
) в качестве примера:
wget https://github.com/unicode-org/icu/releases/download/release-70-rc/icu4c-70rc-Ubuntu-20.04-x64.tgz
tar -xvf icu4c-70rc-Ubuntu-20.04-x64.tgz
# После завершения вы получите каталог `icu`
ls -al ./icu/usr/local/lib # Этот каталог содержит много файлов `.so`, таких как:
# icu/usr/local/lib/libicui18n.so -> libicui18n.so.70
# Скопируйте эти файлы в системный каталог (использование 'mv' в Docker может вызвать проблемы, поэтому используйте 'cp -r', а затем удалите)
cp -r ./icu/usr/local/lib/* /usr/lib/x86_64-linux-gnu/
rm -rf ./icu/
rm -rf icu4c-70rc-Ubuntu-20.04-x64.tgz
Ответ или решение
Обновление операционной системы до новой версии, такой как Ubuntu 24.04, может стать причиной возникновения различных проблем с совместимостью программного обеспечения, особенно если оно зависит от определённых версий библиотек. Ошибка "error while loading shared libraries: libicui18n.so.70: cannot open shared object file: No such file or directory" указывает на отсутствие нужной библиотечной зависимости, которая ранее использовалась в вашей системе.
Теория
Ошибка, с которой вы столкнулись, связана с библиотекой ICU (International Components for Unicode), используемой для поддержки унифицированной обработки текста и символов в различных приложениях. В частности, указывается на отсутствие библиотеки libicui18n.so.70
, которая ранее могла быть частью вашей системы, но была обновлена или удалена в процессе перехода на новую версию ОС.
Каждая версия Ubuntu может использовать разные версии библиотек ICU. В случае Ubuntu 24.04, похоже, используется libicu74
, в то время как ваше программное обеспечение продолжает зависеть от libicu70
.
Пример
Чтобы решить вашу проблему, необходимо установить недостающую библиотеку libicu70
. Это можно сделать несколькими способами. Первый подход — это установить предыдущую версию библиотеки из пакета .deb
. Например, можно воспользоваться командой:
wget https://launchpad.net/ubuntu/+source/icu/70.1-2/+build/23145450/+files/libicu70_70.1-2_amd64.deb
sudo dpkg -i libicu70_70.1-2_amd64.deb
Этот подход предполагает, что вы используете архитектуру amd64
. Если ваша архитектура отличается, вам потребуется найти соответствующий пакет на Launchpad.
Альтернативный подход предполагает сборку и установку необходимой версии ICU вручную из исходного кода. Для этого можно воспользоваться репозиторием ICU на GitHub`:
wget https://github.com/unicode-org/icu/releases/download/release-70-rc/icu4c-70rc-Ubuntu-20.04-x64.tgz
tar -xvf icu4c-70rc-Ubuntu-20.04-x64.tgz
cp -r ./icu/usr/local/lib/* /usr/lib/x86_64-linux-gnu/
rm -rf ./icu/
rm -rf icu4c-70rc-Ubuntu-20.04-x64.tgz
Применение
После выполнения одного из предложенных вариантов, ваша система должна иметь доступ к библиотеке libicui18n.so.70
, что, в свою очередь, позволит вашему программному обеспечению корректно запускаться и функционировать.
Однако важно учитывать, что ручная установка старых версий библиотек имеет свои риски. Во-первых, это может привести к конфликтам в системных зависимостях, особенно если другие приложения требуют более новой версии ICU. Поэтому рекомендуется, по возможности, обновить само программное обеспечение до той версии, которая поддерживает libicu74
— это обеспечит стабильность и безопасность вашей системы.
Также не забывайте о возможности использования контейнеризации (например, Docker), что позволяет изолировать окружение вашего приложения и его зависимости, минимизируя риски конфликтов с системными библиотеками. Это особенно актуально для приложений, которые не обновляются разработчиком и требуют специфичных версий зависимостей.