编译库与仅头文件的库
compiled libraries vs header only libraries
我是一个c++新手,我试图理解为什么有些库需要先编译。
例如,一些boost库只是头文件(例如msm),其他一些需要编译(例如timer)
我找不到一个好的解释为什么会这样。有人能帮我理解吗?
谢谢
某些类型的东西只保存在头文件中,而不是通常的.h(pp)
和.cpp
文件。我所知道的只有模板化的类和函数。
- 头库更容易使用,但更难编写。你只需要给他们
#include
。 - 他们有更多的优化机会,但他们需要更长的时间来编译。有更多的代码和更多的上下文需要优化,但这需要时间。
- 最后但并非最不重要的是,
template
必须在头文件中定义。
但是,通过使用头文件,人们可以逃避的程度或愿意忍受的程度是有限的。例如,在共享库中处理静态对象,顺便说一下,c++ 标准对静态对象一无所知,有时无法在头文件中完成。
相关文章:
- 使用 Makefile 中的头文件编译 Pybind (不使用 cmake)
- 如何使用命令提示符、记事本和 MinGW 使用主文件、头文件和实现文件编译C++程序?
- 无论如何可以将webm / mp4文件编译/记忆为.exe程序吗?(C++)
- 从生成文件编译错误:"Unable to open output file" ..."No such file or directory"
- 如何使用 GLFW 预编译的二进制文件编译 Visual Studio 2019 发布版本
- Arduino IDE中自定义库类的.h文件编译错误的原因是什么
- makefile和错误将与大型项目分开的文件编译
- 如何使用生成文件编译具有多个目录的 c++ 项目
- 我可以将Visual Studio 2015头文件编译成dll并在VS2013中使用它吗?
- 使用Bazel将C 文件编译为python.h
- 使用 .a 文件编译简单的C++文件
- OpenCV 3.2 文件编译
- 如何从多个 cpp 文件编译 WebAssembly
- 从多个文件编译可以"undefined reference"
- 使用静态依赖性为共享二进制文件编译语法需要更加清晰
- 将Gsoap Src文件编译到我的项目中
- 如何用多个文件编译make下的dlib
- 字段的类型不完整,从多个文件编译
- 强制将特定文件编译为Objective-C/文件类型,但将整个项目编译为Objective C++
- OpenGLES 标头(包括 Availability.h)可防止 CPP 文件编译