库通常带有头文件吗?
Posted
技术标签:
【中文标题】库通常带有头文件吗?【英文标题】:Do libraries usually come with header files? 【发布时间】:2013-03-21 10:51:08 【问题描述】:我目前正在用经过验证的有用代码制作一个小型可重用代码库,我想知道这些库通常是如何部署的?我的印象是 .dll 和 .lib 就足够了,但是,我如何引用类和函数?一个库通常会附带很多 .h 文件还是有更优雅的解决方案?
如何部署使用该库的实际应用程序?静态链接后,我还需要发送 .dll 文件还是将库的内容复制到程序中?
【问题讨论】:
在不知道库中有哪些函数/类的情况下,任何人如何能够使用您的库?这就是库头文件的用途。 库几乎总是带有一个或多个 .h 文件。您说“很多” .h 文件 - 库通常会尝试拥有一个 .h ,除非它们在很多领域提供功能,因为它更容易使用,但有些仍然每个类都有一个。有些有一个通用的 .h 文件,其中只包含所有较小的文件以帮助用户。 我认为它不值得回答,但我认为它可能很有趣。在c++
中,您甚至可以遇到仅作为标头提供的库! Eigen
或 boost
的一部分是两个很好的例子。 IMO 当您开始使用模板时,这样做实际上更容易。为模板库交付二进制文件甚至开始变得困难。
【参考方案1】:
根据经验,您可以将要向最终用户公开的所有公共方法收集在一组称为 API 的标头中。此时,你应该区分内部头和API头,你会看到你的头文件数量(API头)会减少,文件结构的管理会容易很多。
【讨论】:
【参考方案2】:交付库时包含三个基本组件:
库本身有几个版本:Unix 下的.so
,Windows 下的.dll
和.lib
,有调试版本,优化版本,可能是多线程和单线程,可能是激活分析的版本。 .和支持静态链接(Unix下.a
,Windows下.lib
,但和你需要链接DLL不一样),
定义外部接口的标头,以及
文档,解释如何安装和链接库,每个版本需要哪些编译器选项等,以及库本身的文档(前置和后置) -每个函数的条件等)
少一点,客户端就不能用了。
关于部署,同样,这应该记录在案。如果客户端静态链接库,则不需要任何内容;如果他动态链接它,那么他还需要部署.so
/.dll
文件。
【讨论】:
以上是关于库通常带有头文件吗?的主要内容,如果未能解决你的问题,请参考以下文章