静态库是如何工作的?(C / c++)
How static libraries work? (C/C++)
我知道如何使用和创建它们,但我找不到关于它是如何实现的文本,函数调用是如何发生的等等,有人能帮助我提供这些信息吗?因为我想了解它们,而不仅仅是知道它是什么以及它是如何工作的
您可能知道,当您编译源文件时,您会得到一个目标文件。根据您的平台,它的扩展名可能是。o或。obj或其他任何东西。静态库基本上是目标文件的集合,有点像.zip文件,但可能没有压缩。当链接器试图生成可执行文件时,试图解析引用的符号,即定位在哪个目标文件(无论是在库中还是其他)中定义它们并将它们链接在一起。因此,静态库也可以包含已定义符号的索引,以便于实现这一点。确切的实现取决于特定的链接器和库文件格式,但基本架构如上所述。
你可能想要查看维基百科中斜体的关键字或其他有关它们的更多信息
我认为维基百科解释得很好:
在计算机科学中,静态库或静态链接库是被解析的一组例程、外部函数和变量在编译时调用程序中,并由编译器、链接器或绑定器,生成目标文件和独立的可执行文件。此可执行文件和编译过程它们都被称为程序的静态构建。从历史上看,库只能是静态的。静态库要么被合并在构建/链接期间使用其他静态库和目标文件以形成单个可执行文件,或者它们可以在运行时加载到加载的可执行文件在静态内存偏移量处的地址空间在编译时/链接时确定。
静态库纯粹是.o
文件的集合,放在一个类似zip文件的归档文件中(没有压缩)。当您使用它进行链接时,链接器将在库中搜索提供主程序中任何缺失符号的.o
文件,并拉入这些.o
文件进行链接,就像它们已经包含在命令行中一样,就像主程序中的.o
文件一样。这个过程是递归地应用的,所以如果从库中拉入的任何.o
文件有未解析的符号,则将再次搜索库中提供定义的其他.o
文件。
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- Python中的for循环与C++有何不同
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- C++中的memset函数工作不正常
- 当 int 方法工作正常时,void 方法有何不同,或者为什么我不能调用 void 方法?