Debian包(.deb):如何确定取决于?

时间:2016-03-29 20:37:35

标签: linux packaging

我有一个二进制应用程序,我想从它创建一个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   没有安装。

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

提前谢谢。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

根据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