加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 06:03:31 所属栏目:百科 来源:网络整理
导读:我有一个C可执行文件,我动态地链接到几个库(Boost,Xerces-c和custom libs). 我明白为什么我会要求.lib / .a文件,如果我选择静态链接这些库(relevant SO question here).但是,为了在链接可执行文件时,如果我正在动态地链接这些外部库,为什么需要提供相应的.li
我有一个C可执行文件,我动态地链接到几个库(Boost,Xerces-c和custom libs).

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

解决方法

编译器不知道动态链接,它只是通过它的原型知道一个函数存在.链接器需要lib文件来解析符号. DLL的lib包含其他信息,例如函数所在的DLL以及它们如何导出(按名称等等).DLL的lib文件比包含完整对象代码的lib文件包含的信息少得多 – libcmmt我的系统上的.lib是19.2 MB,但是msvcrt.lib是“只有”2.6 MB.

请注意,此编译/链接模型在这一点上已经接近40岁,并且在大多数平台之前动态链接.如果今天被设计,动态链接将是一流的公民(例如,在.NET中,每个程序集都有丰富的元数据描述它的出口,因此您不需要单独的头文件和库).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读