Существует ли способ определить, какие пакеты или библиотеки должны быть загружены для поддержки исполняемого файла?

В ранних оболочках двоеточие было единственным способом создать комментарии.

Однако это не истинный комментарий, потому что строка анализируется точно таким же образом, как любая другая команда анализируется, и это может иметь побочные эффекты. Например:

: ${a:=x} # assigns the value 'x' to the variable, 'a'

: $(command) # executes 'command'

(Иногда двоеточие является использованием только в целях вызова тех побочных эффектов, но затем это не используется в качестве комментария.)

Иногда удобно использовать двоеточие, чтобы прокомментировать раздел сценария:

: '
while [ "$n" -ne "$x" ]
do
  : whatever
done
'

Это - большое средство экономии времени по предшествованию каждой строке с #, особенно, если комментарий является только временным.

10
30.10.2015, 18:37
3 ответа

Вы не сказали, который ОС Вы используете так, я собираюсь принять Linux и буду использовать Debian в качестве примера. Быстрый ответ на Ваш вопрос не насколько я знаю. Это могло бы быть полезным обходным решением хотя:

ldd your_prog | awk '{print $1}' | sed 's/\..*//' | 
  while read n; do echo "----- $n ----"; apt-cache search ^$n; done

Это проанализирует ldd вывод и затем выполненный apt-cache (замена, что с эквивалентом для Вашей ОС) для поиска репозиториев пакеты, имя которых и описание содержат первую часть названия библиотеки, возвращенного ldd.

Это не найдет всех их и даст слишком много результатов для некоторых (как libc) но это могло быть полезно.


@FaheemMitha указал на это apt-file мог бы быть лучший путь. Например:

ldd /bin/bash | awk '/=>/{print $(NF-1)}'  | 
 while read n; do apt-file search $n; done |
  awk '{print $1}' | sed 's/://' | sort | uniq

Это возвратит список имен пакета, которые обеспечивают связанные библиотеки.

14
27.01.2020, 20:01
  • 1
    apt-file search на фактическом файле на правой стороне стрелки могло бы быть более эффективным. очень положительная сторона –  Faheem Mitha 20.11.2013, 00:24
  • 2
    @FaheemMitha, спасибо. Ответ отредактирован. –  terdon♦ 20.11.2013, 00:35
  • 3
    Как команда может быть скорректирована для тестирования на существование библиотеки по системе для нахождения тех, которые должны быть загружены? Я думаю вопрос, который я задал, недавно больше приезжает та строка. Я прошу его быть вновь открытым. –  vfclists 04.01.2014, 16:14
  • 4
    @vfclists, не стоящий того действительно, просто apt-get install все они и любой, которые уже установлены, будут проигнорированы. –  terdon♦ 04.01.2014, 16:21
  • 5
    Причина состоит в том, чтобы создать VM без лишних библиотек для быстрых загрузок. Установки пакета содержат много ненужных объектов, и мне только нужны файлы библиотеки и их зависимости, которые требуются исполняемыми файлами. Это также дает мне шанс заточить мой удар и навыки Linux. Никакой Python. –  vfclists 04.01.2014, 17:06

Ваш лучший выбор состоит в том, чтобы найти пакет, который на самом деле поддерживает Ваше распределение. Но если это не собирается работать на Вас затем, я знаю только еще один путь.

Выполненные 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 будет только работать на "простые" программы все же. Программы, которые называют плагины или тот произвольный код выполнения, являются другим разговором все вместе. Для тех необходимо будет работать от консоли и зафиксировать катастрофические отказы/ошибки, как они происходят.

Тем не менее двоичный файл только исполняемый файл неприятно трудно поддержать. Можно хотеть рассмотреть использование чего-то еще. Если Ваш дистрибутив немного вперед, или немного позади системы, которая создала тот исполняемый файл, Вы никогда не можете заставлять это работать.

1
27.01.2020, 20:01

Ответ @terdon отличный, но это еще проще сделать с помощью dpkg-query , который в отличие от ] apt-файл устанавливается по умолчанию в системах Debian.

ldd /bin/bash | awk '/=>/{print $(NF-1)}' | while read n; do dpkg-query -S $n; done | sed 's/^\([^:]\+\):.*$/\1/' | uniq

Создает список пакетов.

2
27.01.2020, 20:01

Теги

Похожие вопросы