静态链接和动态链接有什么区别?
为什么当这些短语被谷歌搜索时,结果是关于静态和动态库的?是同样的事情还是发生同样的事情?
而这又是如何与目标文件的链接联系起来的:例如,我写了代码,它经历了预处理器、目标文件的编译和出现、然后链接的阶段。那么如何理解 .exe 中的目标文件是如何在 VS 中链接的:动态还是静态?但仍然主要的问题是:静态链接和动态链接有什么区别?
静态链接和动态链接有什么区别?
为什么当这些短语被谷歌搜索时,结果是关于静态和动态库的?是同样的事情还是发生同样的事情?
而这又是如何与目标文件的链接联系起来的:例如,我写了代码,它经历了预处理器、目标文件的编译和出现、然后链接的阶段。那么如何理解 .exe 中的目标文件是如何在 VS 中链接的:动态还是静态?但仍然主要的问题是:静态链接和动态链接有什么区别?
你做对了一切。
链接(井,或链接)是构建的最后阶段。在这个阶段发生的一切都受链接描述文件的影响。
更贴近身体
当您构建项目并希望在其中包含一个库(静态或动态构建的 *.a 或 *.so)时,ld 链接您的所有代码。当您在某处编写将在此处调用库 A 的函数时,编译器会在此处留下一条注释(本质上是一个承诺),即调用数据引用将在链接阶段被替换。接下来,欢腾查看链接标志SHARED或STATIC(负责动态或静态库)并根据标准路径和/或您指定的路径进行搜索。
静态库 - (*.a) 被构建为直接构建到您的可执行文件中。它将按照链接器的指示简单地放置。会有静态链接。
动态库 - (*.so) - 将简单地作为参考链接包含在内,不会包含在您的二进制文件中。只会指示在何处引用特定功能。会有动态链接。