什么是 *-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 包?的主要内容,如果未能解决你的问题,请参考以下文章