gpt4 book ai didi

c++ - 如何在 C++ 中添加库?

转载 作者:IT老高 更新时间:2023-10-28 21:42:04 31 4
gpt4 key购买 nike

是的,这是一个愚蠢的问题...但是在我的两个 C++ 类中,我们根本没有这样做(除了本地库:iostream、iomanip 等)...我的问题是任何人都可以提供链接这给出了将库添加到 C++ 的一般解释?

我确实知道#include 是什么意思;只是我对 C++ IDE 中的链接器/目录一无所知。

这么长的问题很短;我可以大致解释一下 C++ 中用于链接库的术语吗?

我正在使用带有 MinGW 的 c::b。

最佳答案

This您可能会感兴趣,但这里有一个简短的版本:

当您组装 .cpp.c 或任何文件时,每个翻译单元(即每个文件)都会生成一个目标文件。创建最终可执行文件时,您将所有目标文件组合成一个二进制文件。对于静态库,您将静态存档(.a.lib)与所有目标文件一起编译到二进制文件中。为了链接到动态共享对象(.so.dll),二进制文件是通过调用全局偏移表创建的,并且您通知链接器您希望与之链接当您运行程序时,共享对象和操作系统加载程序会构建正确的镜像。

C++ 中用于链接库的术语的一般解释

从...开始

翻译 - 这是高级代码(C、Fortran 或其他)由翻译单元翻译成汇编代码的地方。因此,每个 .cpp 文件都会在内部转换为特定架构的程序集。

assemble - 从生成的程序集中生成目标文件。目标文件几乎是机器代码,但它们有很多“未解析的外部”,您可以将其视为指向实际函数定义的指针。

链接 - 这会将您的所有目标文件放入一个连贯的二进制文件中,无论是动态共享对象还是可执行文件。您需要告诉链接器它应该在哪里找到上一阶段所有未解析的外部信息,否则它们将在此处显示为错误。

现在二进制文件位于磁盘上,等待...

loader - 操作系统从磁盘加载二进制文件,其中包含构建程序镜像所需的所有信息。虽然细节是非常特定于平台的,但加载器通常的任务是查找链接器生成的所有共享库引用,加载它们(递归地,因为每个 DSO 都可以有自己的依赖项)并将它们放入程序的内存空间。

关于c++ - 如何在 C++ 中添加库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2749733/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com