链接与包含文件
linking vs including a file
当使用大型代码库时,我看到当使用某个对象时,该对象的头文件也包含在内。其他时候,该对象的库会链接到生成文件中。
做这件事的原因是什么。如果他们可以访问源代码,为什么不包括您正在使用的对象的所有文件,而不是链接到他们的lib*.a文件?
编辑:根据第一条评论说得很清楚。这是一个令人困惑的语句
通常,您需要同时执行这两项操作。头文件告诉编译器什么功能可用,以及它们的外观。他们必须编译时显示。库包含实现,以及必须与应用程序链接才能生成编译器工作电话。
在极少数情况下,"库"可能仅由头文件组成;C++仍然需要在头,而不是在库中,所以一个只包含模板只能是头。在这种情况下包括标题;没有什么可联系的了。(当然,这样图书馆将编译时间推向了顶峰。)
头文件和二进制文件之间不一定存在一一对应的关系。事实上,通常没有。例如,仅仅因为你看到foo.h被包括在内并不一定意味着会有foo.obj或foo.lib。反之亦然;即,你可能会看到foo.lib被链接,但没有foo.h
以Windows为例,您需要相当多的头文件才能使用kernel32.lib中的任何内容,但没有kernel32.h。
使用库的一个很好的论据是,它可以更容易地使用:要编译大型代码库,所有右侧依赖项都必须可用,并且可能需要特定的步骤,而这些步骤与手头的任务无关。当然,编译时间也被缩短了。
相关文章:
- 读取大文件(>2GB)(文本文件包含以太网数据)并通过不同参数随机访问数据的最佳方法是什么?
- C++文件包含多行
- CMake 如何强制third_party库将项目文件包含在当前项目源目录中?
- 是否可以将要"ShellExecute"的文件包含在 dll 中?如果是这样,"ShellExecute"中的文件位置应该是什么?
- C++ 逐行从文件(包含空格)读取数据
- 在 C++ 中,.h 文件包含文件但不起作用
- 生成的资源文件包含奇怪的包含文件
- 可变参数类的文件包含问题
- 为什么文件命令声明可执行文件包含"debug_info"
- 可以将标头文件包含在多个源文件中,而无需重复保护
- 为什么将.HPP文件包含在.h文件中
- Qt C++:将所有库文件包含在项目文件夹中
- 有条件地将文件包含在C++标头中
- 将多个原型文件包含在一个项目中会导致protobuf_AssignDescriptorsOnce()已经有一个主体
- 有没有办法将文件包含在C++中的所有项目文件中
- 将外部.asm文件包含到C++代码中
- 什么是"pch.h",为什么需要将其作为第一个头文件包含在内?
- 该头文件包含DirectX 12中的ThrowIfFailed()
- QT C :函数的多个定义当Header文件包含在MainWindow.h中时
- QT创建者错误地处理标头文件包含来自Directory