查看https://askubuntu.com/a/207750/23678,作者如何知道缺少哪个依赖项?有没有一种通用的方法来查找可执行文件的依赖关系列表,而缺少哪些依赖关系?
UPDATE:我只注意到注意到https://stackoverflow.com/a/9082947/14731使用
readelf -l [可执行文件]
这是最好的方法吗?
在链接的AskUbuntu问题中,作者知道缺少哪个依赖项,因为他试图在64位Ubuntu安装上安装32位应用程序,并引用他的话:
Ubuntu 64位中缺少一些32位库。
因此,他需要安装它们。
但是,要回答您的问题:
是的,有一种方法可以检测缺少的依赖项或获取它们的列表。
在基于Debian的Linux发行版中使用的软件包管理系统 apt
是一个聪明的系统,它将自动检测当前安装的软件包是否缺少依赖项(即使您已使用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依赖vlc vlc 依赖:fonts-freefont-ttf 依赖:vlc-nox |依赖:libavutil51 依赖:libxpm4 依赖:zlib1g 依赖:dpkg 建议:videolan-doc 建议:vlc-plugin-通知 推荐:xdg-utils 中断:vlc-data 中断:vlc-nox 替换:vlc-data 替换:vlc-nox
为简洁起见,减少了输出。
对于dpkg
,在本地文件上运行它的命令是:
dpkg -I file.deb | grep Depends
dpkg -I file.deb
返回有关此.deb
文件的很多信息,因此我们对其进行过滤以仅查看依赖项。
因为apt
实际上实际上只是dpkg的前端,所以这两个命令本质上都做同样的事情,因此它们会查看.deb
应用程序文件以找出所需的依赖关系,除了apt-cache
在存储库中查找之外。这些“依赖”列中的.deb
文件的元数据,这就是为什么即使你已经手动下载并安装应用程序(通常是一个.deb
文件,所以,您要使用安装它dpkg
,而不是apt
)从网站(例如,apt
通过分析已安装的软件包,仍然可以从Google的网站访问Google的Chrome浏览器)。
我对所有这些计算机体系结构知识都不是很精通,但是在这个问题中,对于Java,它实际上是关于32位和64位体系结构的。引用stackoverflow的答案:
您正在没有32位运行时环境的64位系统上运行。
那个需要安装的特定库未包含在安装包的“ Depends”部分中,因为他正在64位系统上安装32位应用程序。因此,需要额外的疑难解答来找到罪魁祸首,因此使用readelf
和ldd
。但是,这些可能更特定于库,并且请记住,“依赖项”并不总是“库”,而可以是其他应用程序。因此,“这是最好的方法吗? ”,我对此表示怀疑。我认为只有在需要额外的故障排除时才是最好的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句