gpt4 book ai didi

c++ - 为什么 C++ 链接器在构建期间需要库文件,即使我是动态链接的?

转载 作者:IT老高 更新时间:2023-10-28 22:39:17 25 4
gpt4 key购买 nike

我有一个 C++ 可执行文件,我正在动态链接多个库(Boost、Xerces-c 和自定义库)。

如果我选择静态链接这些库 (relevant SO question here),我明白为什么需要 .lib/.a 文件。但是,如果我动态地链接这些外部库,为什么在链接我的可执行文件时需要提供相应的 .lib/.so 库文件?

最佳答案

编译器不知道动态链接,它只知道函数通过其原型(prototype)存在。链接器需要 lib 文件来解析符号。 DLL 的 lib 包含附加信息,例如函数所在的 DLL 以及它们如何导出(按名称、按序号等)。 DLL 的 lib 文件包含的信息比包含完整目标代码的 lib 文件少得多 - libcmmt我系统上的 .lib 为 19.2 MB,但 msvcrt.lib “仅”为 2.6 MB。

请注意,此时此编译/链接模型已有近 40 年的历史,并且早于大多数平台上的动态链接。如果它是今天设计的,动态链接将是一等公民(例如,在 .NET 中,每个程序集都有丰富的元数据来准确描述它导出的内容,因此您不需要单独的 header 和库。)

关于c++ - 为什么 C++ 链接器在构建期间需要库文件,即使我是动态链接的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2029741/

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