库通常带有头文件吗?

Posted

技术标签:

【中文标题】库通常带有头文件吗?【英文标题】:Do libraries usually come with header files? 【发布时间】:2013-03-21 10:51:08 【问题描述】:

我目前正在用经过验证的有用代码制作一个小型可重用代码库,我想知道这些库通常是如何部署的?我的印象是 .dll 和 .lib 就足够了,但是,我如何引用类和函数?一个库通常会附带很多 .h 文件还是有更优雅的解决方案?

如何部署使用该库的实际应用程序?静态链接后,我还需要发送 .dll 文件还是将库的内容复制到程序中?

【问题讨论】:

在不知道库中有哪些函数/类的情况下,任何人如何能够使用您的库?这就是库头文件的用途。 库几乎总是带有一个或多个 .h 文件。您说“很多” .h 文件 - 库通常会尝试拥有一个 .h ,除非它们在很多领域提供功能,因为它更容易使用,但有些仍然每个类都有一个。有些有一个通用的 .h 文件,其中只包含所有较小的文件以帮助用户。 我认为它不值得回答,但我认为它可能很有趣。在c++ 中,您甚至可以遇到仅作为标头提供的库! Eigenboost 的一部分是两个很好的例子。 IMO 当您开始使用模板时,这样做实际上更容易。为模板库交付二进制文件甚至开始变得困难。 【参考方案1】:

根据经验,您可以将要向最终用户公开的所有公共方法收集在一组称为 API 的标头中。此时,你应该区分内部头和API头,你会看到你的头文件数量(API头)会减少,文件结构的管理会容易很多。

【讨论】:

【参考方案2】:

交付库时包含三个基本组件:

库本身有几个版本:Unix 下的.so,Windows 下的.dll.lib,有调试版本,优化版本,可能是多线程和单线程,可能是激活分析的版本。 .支持静态链接(Unix下.a,Windows下.lib,但和你需要链接DLL不一样),

定义外部接口的标头,以及

文档,解释如何安装和链接库,每个版本需要哪些编译器选项等,以及库本身的文档(前置和后置) -每个函数的条件等)

少一点,客户端就不能用了。

关于部署,同样,这应该记录在案。如果客户端静态链接库,则不需要任何内容​​;如果他动态链接它,那么他还需要部署.so/.dll 文件。

【讨论】:

以上是关于库通常带有头文件吗?的主要内容,如果未能解决你的问题,请参考以下文章

C++ 使用带有在头文件中定义的全局变量的 C 库

用于头文件中的匿名命名空间

C 标准库中的头文件可以包含另一个头文件吗?

单片机c语言中常用的头文件有哪些?分别有啥作用啊?

centos 上带有 gcc 内核头文件的 yum repo

头文件