Глядя на https://askubuntu.com/a/207750/23678 , как автор узнал, какая зависимость отсутствовала? Есть ли общий способ поиска списка зависимостей исполняемых файлов и какие из них отсутствуют?
ОБНОВЛЕНИЕ : Я только что заметил, что заметил, что https: // stackoverflow. com / a / 9082947/14731 используется
readelf -l [исполняемый файл]
blockquote>Это лучший подход?
В связанном вопросе AskUbuntu автор знал, какая зависимость отсутствовала, потому что он пытался установить 32-битное приложение на 64-битную установку Ubuntu, и, процитировав его:
в 64-битной Ubuntu отсутствуют некоторые 32-битные библиотеки.
blockquote>Поэтому ему нужно было их установить.
Тем не менее, чтобы ответить на ваши вопросы:
- Как обнаружить отсутствующие зависимости для исполняемого файла?
- Существует ли общий способ поиска списка зависимостей исполняемых файлов и какие из них отсутствуют?
Да, есть способ обнаружить отсутствующие зависимости или получить их список.
Обнаружение отсутствующих зависимостей:
Система управления пакетами
apt
, используемая в дистрибутивах Linux на основе Debian, представляет собой умную систему, в которой она автоматически обнаружит, установлены ли в данный момент установленные пакеты. отсутствующие зависимости (даже если вы установили их, используяdpkg
, а неapt-get
). Допустим, вы установили пакет без его зависимостей, и в следующий раз при выполненииapt-get upgrade
вы получите ошибку, подобную этой:The following packages have unmet dependencies: package1 : Depends: package2 (>= 1.8) but 1.7.5-1ubuntu1 is to be installed
Указывает, что
package1
зависит отpackage2
иpackage2
(а именно, более новая версия в этом примере) не установлена. Обычно, чтобы исправить это, вы выполняете командуsudo apt-get install -f
, которая инструктируетapt-get
пытаться получить и установить отсутствующие пакеты.Просмотрите список зависимостей исполняемого файла:
Пакет
apt
, как иdpkg
, предоставляет удобный способ перечисления зависимостей пакета.
Для
apt
команда выглядит так:apt-cache depends <packagename>
Эта команда проверит пакет в репозиториях и выведет список зависимостей, а также «предлагаемых» пакетов. Если вы действительно хотите отфильтровать зависимости в одиночку, вы можете отфильтровать вывод, выполнив следующее:
apt-cache depends <packagename> | grep Depends
. Вот пример выходных данных:alaa@aa-lu:~$ apt-cache depends vlc vlc Depends: fonts-freefont-ttf Depends: vlc-nox |Depends: libavutil51 Depends: libxpm4 Depends: zlib1g PreDepends: dpkg Suggests: videolan-doc Recommends: vlc-plugin-notify Recommends: xdg-utils Breaks: vlc-data Breaks: vlc-nox Replaces: vlc-data Replaces: vlc-noxДля краткости вывод сокращен.
Для
dpkg
команда для его запуска в локальном файле:dpkg -I file.deb | grep Depends
dpkg -I file.deb
возвращает много информации об этом файле.deb
, поэтому мы фильтруем его смотреть только на зависимости.Так как
apt
на самом деле просто интерфейс для dpkg , обе эти команды, по сути, делают одно и то же, они обращаются к файлу.deb
приложения, чтобы найти какие зависимости ему нужны, кроме того, чтоapt-cache
будет искать в репозиториях. Эти «зависимости» перечислены в внутри файла.deb
как метаданные, поэтому даже если вы вручную загрузили и установили приложение (обычно это файл.deb
, поэтому вы будете устанавливать используяdpkg
, а неapt
) с веб-сайта (например, браузер Google Chrome с веб-сайта Google),apt
все равно узнает, что отсутствуют зависимости, анализируя установленные пакеты.
Я не очень хорошо разбираюсь в этой компьютерной архитектуре, но в случае с Java в этом вопросе речь идет о 32- и 64-битной архитектуре. Чтобы процитировать ответ от stackoverflow:
Вы работаете в 64-битной системе без 32-битной среды выполнения. Blockquote>Эта конкретная библиотека, которую нужно было установить, не была включена в " Зависит «часть инсталляционного пакета, потому что он устанавливал 32-битное приложение в 64-битной системе. Таким образом, для поиска виновника потребовалось дополнительное устранение неполадок, отсюда и использование
readelf
иldd
. Однако они, вероятно, более специфичны для библиотек и помнят, что «зависимости» не всегда являются «библиотеками», но могут быть и другими приложениями. Поэтому « Это лучший подход? », я сомневаюсь в этом; Я думаю, что это лучше всего, когда требуется дополнительное устранение неполадок.