栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么我应该只为更新库而重新编译整个程序?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么我应该只为更新库而重新编译整个程序?

如果所涉及功能的签名没有更改,则“重建”程序意味着必须再次 链接 目标文件。您无需再次 编译 它们。

API是合约,描述了库中公共功能的接口。当编译器生成代码时,它需要知道什么类型的变量以及以什么顺序传递给每个函数。它还需要知道返回类型,因此它知道将从函数返回的数据的大小和格式。编译代码时,库函数的地址可能表示为“库的开头加上140字节”。编译器不知道绝对地址,因此仅指定距库开头的偏移量。

但是 库中,功能的 内容
(即实现)可能会更改。发生这种情况时,代码的长度可能会更改,因此函数的地址可能会更改。链接器的工作是了解每个函数的入口点所在的位置,并将这些地址填充到目标代码中以创建可执行文件。

另一方面,如果库中的 数据结构 发生了变化,并且库要求调用者管理内存(这是一种不好的做法,但不幸的是很常见),那么您
需要重新编译代码,以便它可以解决这些更改。例如,如果您的代码用于

malloc(sizeof(dataStructure))
为大小加倍的库数据结构分配内存,则您将需要重新编译代码,因为
sizeof(dataStructure)
它将具有更大的值。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/392294.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号