什么是 *-devel 包?

Posted

技术标签:

【中文标题】什么是 *-devel 包?【英文标题】:What are *-devel packages? 【发布时间】:2011-01-22 11:04:53 【问题描述】:

“libgtk+-devel”或“python-devel”等开发包有什么用处?它们是否包含库的来源?它与 libgtk+ 等非开发包有何不同?

【问题讨论】:

不值得打开另一个答案,但除了现有答案之外,我应该强调打包者尝试放入非开发包,例如libgtk+ 运行所需的最小占用空间(相反“开发”)gtk+ 程序。这意味着只有动态库和配置文件。其他所有内容都包含在互补的 -devel 包中。 【参考方案1】:

*-devel 包(在基于 Debian 的发行版中通常称为 *-dev)通常是针对给定库编译代码所需的所有文件。

要使用库 libfoo 运行应用程序,只需要实际共享库文件(*.so.*,例如 libfoo.so.1.0)(可能还需要一些数据文件和一些特定于版本的符号链接)。

当您真正想要编译使用该库的 C 应用程序时,您将需要描述该应用程序接口的头文件(*.h,例如 foo.h)以及指向该应用程序的无版本符号链接共享库(*.so,例如libfoo.so -> libfoo.so.1.0)。这些通常捆绑在*-devel 包中。

有时*-devel 包还包括库的静态编译版本(*.a,例如libfoo.a),以防您想要构建一个完全不依赖动态库的独立应用程序.

其他语言(例如 Java、Python 等)使用不同的方式来记录库的 API(有效地包括实际库中的所有必要信息),因此通常不需要单独的 *-devel 包(除了文档和其他工具)。

【讨论】:

差不多。 .so 文件在 -devel 包中;普通共享库通过.so.*,因为它包含一个SONAME。 .so 文件由链接器使用,.so.* 库在运行时使用。 所以基本上你需要有问题的应用程序的 *devel 库,如果它是另一个应用程序的依赖项,因为你需要公开接口? @ohhh:不。如果您编译需要该库的东西,您只需要这些包。如果一个包使用该库,那么您不需要-devel 包。换句话说:大多数普通用户永远不需要-devel 包,但开发人员可能需要。【参考方案2】:

它们通常包含必要的标头和库。例如,如果您想在自己的应用程序中嵌入 Python 解释器,python-devel 将提供您需要的 Python 头文件和库。还包括一些其他工具和文档(例如开发人员手册或代码示例)。

【讨论】:

pyinstaller 之类的工具是使用它的一个例子吗?因为 AFAIK 冷冻机也在它们创建的包中嵌入了 Python 解释器,这正是您在此处所说的。

以上是关于什么是 *-devel 包?的主要内容,如果未能解决你的问题,请参考以下文章

linux devel包 和 非devel包的区别

Linux里面openss-devel是啥?

linux devel包 和 非devel包的区别

安装openssl-devel

为啥我的linux下载所有带devel的软件都是无法定位软件包

PHP