Существует исполняемый файл, который я хочу установить на компьютер, который я не могу перекомпилировать, который не был собран как пакет, и я хочу загрузить библиотеки, необходимые для их запуска.
Ниже приведена часть результатов работы ldd
на нем
libpango-1.0.so.0 => /usr/lib/i386-linux-gnu/libpango-1.0.so.0 (0xb702f000)
libcairo.so.2 => /usr/lib/i386-linux-gnu/libcairo.so.2 (0xb6f64000)
libatk-1.0.so.0 => /usr/lib/i386-linux-gnu/libatk-1.0.so.0 (0xb6f43000)
libsqlite3.so.0 => /usr/lib/i386-linux-gnu/libsqlite3.so.0 (0xb6e9e000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb6cf4000)
/lib/ld-linux.so.2 (0xb786e000)
libxcb.so.1 => /usr/lib/i386-linux-gnu/libxcb.so.1 (0xb6cd3000)
libgio-2.0.so.0 => /usr/lib/i386-linux-gnu/libgio-2.0.so.0 (0xb6b7c000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb6b4f000)
Существует ли инструмент, который может использовать эту информацию, чтобы выбрать, какие пакеты следует загрузить или, что еще лучше, извлекать только перечисленные библиотеки и их зависимости, чтобы минимизировать использование диска? Система работает на безголовой виртуальной машине, и программа будет отображаться через VNC.
Хотя я подозреваю, что полноценный графический рабочий стол обеспечит большинство необходимых библиотек, я хочу загрузить только необходимые библиотеки, их зависимости и достаточно пакета X Windows для его поддержки.
источник
Ответы:
Вы не сказали, какую ОС вы используете, поэтому я собираюсь взять Linux и в качестве примера буду использовать Debian. Быстрый ответ на ваш вопрос - нет, насколько я знаю. Это может быть полезным обходным путем, хотя:
Это проанализирует
ldd
выходные данные и затем запуститapt-cache
(замените его эквивалентом для вашей ОС), чтобы найти в репозиториях пакеты, имя и описание которых содержат первую часть имени библиотеки, возвращаемогоldd
.Это не найдет все из них и даст слишком много результатов для некоторых (например
libc
), но это может быть полезно.@FaheemMitha указал, что это
apt-file
может быть лучше. Например:Это вернет список имен пакетов, которые предоставляют связанные библиотеки.
источник
apt-file search
на самом файле справа от стрелки может быть более эффективным.apt-get install
все они и все, что уже установлено, будут игнорироваться.Ответ @ terdon великолепен, но сделать это проще, используя, в
dpkg-query
отличие от того,apt-file
который установлен по умолчанию в системах Debian.Это создает список пакетов.
источник
Лучше всего найти пакет, который действительно поддерживает ваш дистрибутив. Но если это не сработает для вас, я знаю только один способ.
Запустите ldd как есть, затем установите эти зависимости вручную.
Например
libpango-1.0.so.0 => /usr/lib/i386-linux-gnu/libpango-1.0.so.0 (0xb702f000)
Для меня это означало бы установить
apt-get install libpango:i386
и молиться, чтобы версия в нестабильной версии Debian была достаточно хорошей.Вам нужно будет пройтись по каждой строке ldd, Google, посмотреть в ваших доступных репозиториях, и в целом вам повезет. Затем установите их один за другим. Пока программа действительно не запустится. ldd будет работать только для "простых" программ. Программы, которые вызывают плагины или запускают произвольный код, - это совсем другое дело. Для них вам нужно будет запустить из консоли, и исправить сбои / ошибки, как они происходят.
Тем не менее, двоичный исполняемый файл ужасно трудно поддерживать. Вы можете рассмотреть возможность использования чего-то еще. Если ваш дистрибутив немного впереди или немного отстает от системы, которая создала этот исполняемый файл, вы никогда не сможете заставить его работать.
источник