【问题标题】:Debian package (.deb): how determine depends?Debian 软件包 (.deb):如何确定依赖?
【发布时间】:2016-03-29 20:37:34
【问题描述】:

我有一个二进制应用程序,我想从中创建一个 Debian 软件包 (*.deb)。在 DEBIAN/control 文件中,我需要添加依赖项。 为了找到依赖关系,我执行以下命令:

  > objdump -p greenCity | grep NEEDED
  NEEDED               libsfml-graphics.so.2.3
  NEEDED               libsfml-system.so.2.3
  NEEDED               libsfml-window.so.2.3
  NEEDED               libgcc_s.so.1
  NEEDED               libc.so.6

这里是控制文件内容:

Package: greencity
Version: 1.0
Architecture: amd64
Depends: libsfml-graphics, libsfml-system, libsfml-window
Maintainer: x x <x@x.com>
Section: base
Priority: optional
Homepage: 
Description: xxx

最后,我创建包并安装它。在安装过程中,我收到以下错误:

greencity 依赖于 libsfml-graphics;但是:包 未安装 libsfml-graphics。绿城取决于 libsfml 系统;但是:未安装软件包 libsfml-system。 greencity 依赖于 libsfml-window;但是:包 libsfml-window 没有安装。

信息:软件包 libsfml-graphics/system/window2.3 已安装在我的 Linux 上。 那么,确定依赖名称的规则是什么?我尝试了很多可能性,但没有一个可行:(

提前谢谢你。

【问题讨论】:

    标签: linux packaging


    【解决方案1】:

    该库的 Debian 软件包名称附加了该库的主要版本号; 例如libsfml-graphics2libsfml-system2

    虽然这是 Debian 软件包命名的常见模式,但也经常有例外。在编写控制文件时,您应该始终查找包的确切名称(在系统的包列表中或在https://packages.debian.org/ 上);不要假设包名总是与文件名匹配。

    【讨论】:

    • 感谢您的回答,但我尝试了 libsfml-graphics2,但没有成功。事实上,唯一可行的依赖名称是:libsfml-graphics2.3v5。但是这种依赖关系太严格了,无法创建包,不是吗?
    【解决方案2】:

    基于syntax of Debian control file,您需要在“依赖”部分提供包名称

    您可以使用dpkg-query 命令轻松找到它。例如,您需要 libgcc_s.so.1 在场。然后检查哪个包提供它

    $ dpkg-query  -S 'libgcc_s.so.1'
    libgcc1:i386: /lib/i386-linux-gnu/libgcc_s.so.1
    lib32gcc1: /usr/lib32/libgcc_s.so.1
    libgcc1:amd64: /lib/x86_64-linux-gnu/libgcc_s.so.1
    

    现在你可以写了

    Depends: libgcc1
    

    【讨论】:

      猜你喜欢
      • 2021-02-09
      • 2012-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-11
      相关资源
      最近更新 更多