C 什么是*-devel包?

C 什么是*-devel包?,c,C,诸如“libgtk+-devel”或“python-devel”等devel包的效用是什么。?它们是否包含库的源代码?它与libgtk+等非devel包有何不同?它们通常包含必要的头文件和库。例如,如果您想在自己的应用程序中嵌入python解释器,python devel将提供所需的python头和库。还包括一些附加工具和文档(例如开发人员手册或代码示例)。包(在基于Debian的发行版中通常称为*-dev)通常是针对给定库编译代码所需的所有文件 要使用库libfoo运行应用程序,只需要实际共享

诸如“libgtk+-devel”或“python-devel”等devel包的效用是什么。?它们是否包含库的源代码?它与libgtk+等非devel包有何不同?

它们通常包含必要的头文件和库。例如,如果您想在自己的应用程序中嵌入python解释器,python devel将提供所需的python头和库。还包括一些附加工具和文档(例如开发人员手册或代码示例)。包(在基于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
包(文档和其他工具除外)。

不值得再打开另一个答案,但是除了现有的答案之外,我应该强调的是,打包人员尝试将运行(而不是“开发”)gtk+程序所需的最小占用空间放入非devel包中,例如
libgtk+
。这意味着只有动态库和配置文件。其他所有内容都包含在补充的
-devel
包中。
.so
文件在-devel包中;普通的共享库是
.so.
,因为它包含一个SONAME。链接器使用
.so
文件,运行时使用
.so.
库。因此,如果所讨论的应用程序是另一个应用程序的依赖项,则基本上需要该应用程序的*devel libs,因为需要公开接口?pyinstaller之类的工具就是使用该接口的示例吗?因为AFAIK冷冻库在它们创建的包中嵌入了Python解释器,这正是您在这里所说的。