Boost是一个复杂的示例,让我们先来看一个简单的示例。
确切地说,openssl源代码包提供了5个二进制包:
libssl1.0.0
包含OpenSSL动态库1.0.0版。这就是与该库链接的程序需要运行的东西。软件包名称包含一个版本号,因为如果您有其他程序链接到与1.0.0二进制不兼容的另一个版本,则可能同时安装了该库的其他版本。
openssl
包含使用OpenSSL库的命令行工具。即使您拥有该库的多个版本,也不需要这些工具的多个版本:只有一个/usr/bin/openssl
以及相关的工具,数据和文档。
libssl-dev
包含要编译针对OpenSSL链接的程序时所需的文件。有C头文件(*.h
),库链接(*.a
,*.so
),以及一些配套文件。
libssl-doc
包含OpenSSL库的文档。如果要编写使用该库的程序,则仅需要此软件包。
libssl1.0.0-dbg
包含调试符号。它仅对调试OpenSSL库或使用它的程序有用。andrewsomething的答案提供了有关这些-dbg
软件包的更多信息。
此外,precise包含该库的旧版本libssl0.9.8
,因为有些程序仍与旧版本链接。
您可能会看到的其他软件包是针对C语言以外的语言的绑定。OpenSSL不附带任何语言(其他语言与OpenSSL都有绑定,但它们并非来自同一来源)。sqlite3是一个示例,它附带了TCL绑定。
拆分此类软件包的主要原因是不同的软件包具有不同的目标受众。一个没有人可以编译任何东西的系统只需要核心lib
程序包,也许需要命令行工具。如果需要,它们将从依赖项自动安装。如果有人要编译使用该库的程序,则需要该-dev
软件包。如果有人要编写使用该库的程序,则需要该-doc
软件包。
那Boost呢?它遵循相同的结构,但是由于Boost是一个庞大的库,因此将其分解为许多较小的程序包:libboost-*1.46.1
和libboost-*1.46-dev
。确切地说,只有Boost的一个版本1.46,但oneiric的版本为1.42和1.46。还有一个元软件包boost-defaults可以将版本化的软件包作为依赖项引入。
查看libhangul,除了动态库包libhangul1
和开发包外libhangul-dev
,还有一个包libhangul-data
。该软件包包含该库所需的其他数据。即使您有该库的多个版本,它们也可以共享-data
软件包。而且,该软件包与体系结构无关。包含大量与体系结构无关的数据的软件被分为与体系结构有关的软件包和与体系结构无关的软件包,以节省分发站点上的空间。另一个具有类似含义的后缀是-common
。
Ubuntu和Debian打包规则非常相似,因此制作Debian软件包的材料也适用于Ubuntu。实际上,您可以为Debian和Ubuntu使用相同的源软件包。唯一使Debian和Ubuntu软件包不同的是针对不同的库版本对其进行编译,这仅是不同版本的Ubuntu之间的区别而已。掌握了Debian开发人员文档,尤其是Debian Policy Manual和Developer's Reference;有关简介,请参见《新维护人员指南》。忽略有关使用Debian项目的内容,等等,只需阅读有关制作软件包的内容。dh_make
是开始使用deb软件包的好方法(您需要选择“ Library”)。