Вопрос или проблема
Я пытаюсь запустить программу на компьютере с Red Hat 6.5. Это приводит к появлению следующих трех ошибок:
"/lib64/libc.so.6: версия `GLIBC_2.14' не найдена"
"/usr/lib64/libstdc++.so.6: версия `GLIBCXX_3.4.15' не найдена"
"/lib64/libm.so.6: версия `GLIBC_2.15' не найдена"
Очевидно, мне нужно установить эти библиотеки, но при поиске я только нашел решения, которые предлагают выполнить “sudo apt-get”, что, к сожалению, я не могу сделать (нет доступа sudo). Таким образом, мне нужно решение для установки их без sudo. (ПРИМЕЧАНИЕ: На этой системе нет apt-get, но я под впечатлением, что yum, который здесь есть, не так уж далек от этого. Тем не менее, он также требует root).
Кроме того, я бы предпочел, чтобы решение касалось только моей учетной записи или даже ограничивалось программой, которую я пытаюсь запустить, чтобы не затрагивать других пользователей на этой системе.
Я был бы признателен за помощь в том, как добиться чего-то подобного, или, если это невозможно, мне бы хотелось это знать (и из любопытства, может быть, также почему).
Итак, есть две вещи, которые вам нужно знать:
- Как получить библиотеку
- Как использовать библиотеку
Получение библиотеки
Обратите внимание, что я менее знаком с yum, чем с apt-get
Возможно, что версия библиотеки, которую вам нужно, недоступна для вашего дистрибутива. Если это так, получение библиотеки будет более сложным и может потребовать сборки из исходников.
Если она доступна…
Вы видели инструкции, указывающие на apt-get. Это вещь Debian (включая Ubuntu и Mint). Yum – это аналогичный инструмент для родственников Redhat (включая Fedora и Centos). Yum используется для установки “RPM”, тогда как apt-get устанавливает DPKG.
Начните с:
Использование библиотеки
Вы можете разместить библиотеку в любой понравившийся вам каталог и затем использовать переменную среды LD_LIBRARY_PATH
для указания на этот каталог.
Есть одно препятствие! Насколько я знаю, нет способа добавить в стандартный путь библиотеки, только полностью его заменить. В отличие от PATH
, LD_LIBRARY_PATH
по умолчанию не установлен. Поэтому, чтобы его установить, вам нужно будет указать каждый каталог библиотеки, который вам нужен:
export LD_LIBRARY_PATH=/home/me/my-libs:/lib:/usr/lib: ... и остальные
Если вы не знаете, какие каталоги lib вам нужны, вы можете проанализировать свою программу с помощью ldd
перед установкой переменной среды. Например:
ldd /bin/bash
linux-vdso.so.1 (0x00007fff55394000)
libtinfo.so.6 => /lib/x86_64-linux-gnu/libtinfo.so.6 (0x00007fb13c31f000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fb13c319000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb13c12f000)
/lib64/ld-linux-x86-64.so.2 (0x00007fb13c480000)
Показывает, что bash требует включения /lib:/lib64
.
Я ставлю на то, что программа, которую вы пытаетесь запустить, требует более новой версии GLIBC, чем та, что установлена на вашем компьютере. К сожалению, поскольку это GLIBC, нет способа получить более новую версию без доступа root и без влияния на всю систему. Проверьте сайт программы, убедитесь, что она поддерживается на RHEL 6.
Ответ или решение
Установка необходимых библиотек для программы на системе Red Hat 6.5 без прав sudo
может представлять собой сложную задачу, особенно когда дело касается библиотеки glibc
. Ниже мы рассмотрим возможные шаги для решения вашей проблемы.
Установите необходимые библиотеки
-
Проверьте наличия RPM
Первым шагом будет проверка, доступны ли необходимые версии библиотек в репозиториях. Посколькуyum
требует прав суперпользователя (root), вы можете попробовать получить необходимые RPM-файлы по следующим ссылкам:Введите нужные вам пакеты:
glibc
libstdc++
-
Загрузите RPM напрямую
Если RPM-файлы доступны, вы можете загрузить их вручную. Запишите версии, которые вам нужны (например,GLIBC_2.14
,GLIBCXX_3.4.15
), затем скачайте соответствующие RPM-файлы. -
Извлеките файлы из RPM
Если у вас нет прав для установки RPM черезyum
, вы можете извлечь файлы из RPM-пакетов. Для этого используйте следующую команду:rpm2cpio package.rpm | cpio -idmv
Эта команда извлечет файлы в текущий каталог.
Используйте извлечённые библиотеки
После извлечения файлов библиотек выполните следующие действия:
-
Создайте пользовательский каталог для библиотек
Вам нужно создать каталог в вашем домашнем каталоге, где вы будете хранить эти библиотеки:mkdir -p ~/my-libs
-
Скопируйте файлы библиотек
Скопируйте необходимые файлы библиотек в этот каталог (например, если у вас извлечённые файлыlibc.so.6
,libstdc++.so.6
и т.д.):cp ./libc.so.6 ~/my-libs/libc.so.6 cp ./libstdc++.so.6 ~/my-libs/libstdc++.so.6
-
Настройте переменную окружения
LD_LIBRARY_PATH
Чтобы указать системе искать библиотеки в вашем пользовательском каталоге, выполните команду:export LD_LIBRARY_PATH=~/my-libs:$LD_LIBRARY_PATH
Вы можете добавить эту строку в файл
~/.bashrc
или~/.bash_profile
, чтобы не вводить её каждый раз. -
Запустите вашу программу
После того как вы настроите переменную окружения, попробуйте запустить вашу программу еще раз. Если все сделано правильно, программа должна найти необходимые библиотеки.
Важное замечание
Библиотека glibc
является критически важной для системы, и замена её может привести к нестабильности. Поэтому всегда понимайте последствия работы с библиотеками на низком уровне.
Если программа требует версии glibc
, которая значительно новее, чем установленная на вашей системе, возможно, вы не сможете её запустить без прав администратора. В этом случае, вам может понадобиться рассмотреть использование контейнеризации (например, Docker, если доступен), или виртуальную машину, где можно настроить более свежую версию ОС.
Заключение
Изложенные шаги позволят вам установить необходимые библиотеки без прав суперпользователя на Red Hat 6.5. Тем не менее, будьте внимательны и осторожны в манипуляциях с библиотеками, чтобы избежать потенциальных проблем с системой.