Вопрос или проблема
Я получаю следующую ошибку при попытке запустить vtysh для некоторых сетевых симуляций
vtysh: ошибка при загрузке разделяемых библиотек: libreadline.so.6: невозможно открыть файл общего объекта: Нет такого файла или каталога
В настоящее время у меня установлены libreadline-dev и libreadline-7, и я создал символическую ссылку на libreadline.so.7 по пути /lib/x86_64-linux-gnu/libreadline.so.6, но это не помогло. Я предполагаю, что возможно, он ищет другой путь, но я не уверен, как подойти к устранению проблем такого рода.
С предложениями ниже не повезло. После компиляции readline6.3 из исходного кода, как предложено ниже, мой вывод от ldconfig -v | grep readline
таков:
/sbin/ldconfig.real: Невозможно найти /usr/local/lib/x86_64-linux-gnu: Нет такого файла или каталога
/sbin/ldconfig.real: Путь `/lib/x86_64-linux-gnu' указан более одного раза
/sbin/ldconfig.real: Путь `/usr/lib/x86_64-linux-gnu' указан более одного раза
libreadline.so.6 -> libreadline.so.6.3
libreadline.so.7 -> libreadline.so.7.0
/sbin/ldconfig.real: /lib/x86_64-linux-gnu/ld-2.27.so является динамическим линковщиком, игнорируется
libguilereadline-v-18.so.18 -> libguilereadline-v-18.so.18.0.0
/home/gdc/Desktop/readline-6.3:
/sbin/ldconfig.real: /lib32/ld-2.27.so является динамическим линковщиком, игнорируется
Поскольку создание символической ссылки не сработало, вашей единственной альтернативой будет компиляция кода из исходников и добавление его в ваше окружение. Вы можете получить исходный код для readline-6.3
здесь:
http://ftp.gnu.org/gnu/readline/
После компиляции создайте файл /etc/ld.so.conf.d/x86_64_readline-gnu.conf и введите строку /path/to/readline/lib
в зависимости от того, где вы его скомпилировали. Затем выполните команду:
ldconfig -v | grep readline
Вы увидите, что libreadline.so.6
присутствует в вашем окружении, и vtysh
будет работать без проблем.
Ответ или решение
Ошибка, с которой вы столкнулись, указывает на то, что программа vtysh
не может найти библиотеку libreadline.so.6
. Эта проблема может возникнуть по нескольким причинам, и мы рассмотрим возможные пути её решения в нашей статье.
Понимание проблемы
Когда вы видите сообщение об ошибке, такое как libreadline.so.6: cannot open shared object file: No such file or directory
, это означает, что операционная система не может найти динамическую библиотеку, необходимую для запуска программы. Вы уже установили libreadline-dev
и libreadline-7
, но при этом vtysh
требует именно libreadline.so.6
, которая не была установлена в вашей системе.
Ваша попытка создать символическую ссылку на libreadline.so.7
в каталоге /lib/x86_64-linux-gnu
может быть недостаточной, поскольку не все программы корректно обрабатывают обновлённые ссылки, особенно если ожидается конкретная версия библиотеки.
Шаги для устранения ошибки
-
Установка библиотеки версии 6: Если
vtysh
был скомпилирован с привязкой кlibreadline.so.6
, самым надёжным решением будет установить именно эту версию библиотеки. Вы можете скачать исходный код дляreadline-6.3
с официального сайта GNU. После загрузки следуйте инструкциям для компиляции:tar -zxvf readline-6.3.tar.gz cd readline-6.3 ./configure make sudo make install
-
Проверка пути библиотеки: После установки корректной версии библиотеки, убедитесь, что её путь указан в конфигурации динамического загрузчика. Для этого создайте файл /etc/ld.so.conf.d/readline.conf с путём, где была установлена библиотека:
echo "/usr/local/lib" | sudo tee /etc/ld.so.conf.d/readline.conf
Затем выполните команду
ldconfig
, чтобы обновить кеш динамических ссылок:sudo ldconfig
-
Проверка установленных библиотек: После выполнения вышеуказанных шагов, проверьте наличие
libreadline.so.6
:ldconfig -v | grep readline
Это должно вернуть информацию о библиотеке
libreadline.so.6
, если она была установлена правильно. -
Обновление переменной окружения: Убедитесь, что переменная окружения
LD_LIBRARY_PATH
настроена корректно, особенно если библиотеки были установлены в нестандартные пути. Вы можете добавить путь к библиотекам в вашем файле~/.bashrc
:export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
После этого выполните команду
source ~/.bashrc
, чтобы изменения вступили в силу. -
Полная переустановка: Если все описанные шаги не помогли, рассмотрите возможность полного удаления пакетов
libreadline
и последующей их переустановки:sudo apt-get remove --purge libreadline7 libreadline-dev sudo apt-get install libreadline6-dev
Заключение
Следуя указанным шагам, вы должны устранить ошибку, связанную с отсутствием libreadline.so.6
. Часто такие проблемы возникают из-за несовместимости версий библиотек или неправильной конфигурации системы. Обязательно внимательно проверьте все действия, которые вы совершаете, и при необходимости обращайтесь к документации. Если возникнут сложности, не стесняйтесь обращаться за помощью к сообществу разработчиков.