当.h文件更新时,是否应该更新库

Should library be updated, when .h file is updated?

本文关键字:更新 是否 文件      更新时间:2023-10-16

我已经向客户发送了我们的库(.a.so)以及.h文件。

现在我在.h文件中有一些更改。所以我的问题是,我需要发送更新的.a.so还是发送.h才能工作。

客户将用旧的.h替换.h文件。

这行得通吗?

这取决于您在.h文件中更新了什么。

如果你更新了一些不需要重新编译的东西(例如一些注释?),那么你可以给出更新后的.h文件。

但是,通常,我认为为了安全起见,如果更改头,重新编译整个模块是一个很好的做法(因此,您可能需要向客户端重新发送对象和库二进制文件)。

如果已经移动了成员函数声明,则绝对必须重新分发。

这是因为任何v表都将无效。

内联也将改变链接行为:旧库将导出一个修饰的非内联函数,该函数与新版本的头指定的行为不一致。

是的,你应该用.a/.so升级.h。例如,你改变了一些数据结构,现在它更大/更小了。只需更新标头,就可以得到堆损坏程序错误。

要问自己的一个问题是:"烤饼"会做什么?

我有一些项目使用scons作为构建工具。我注意到,当我更改头文件时,scons总是编译受影响的模块,但有时不觉得有必要重建它们所属的库或可执行文件。

一般来说,在向客户发布之前重新编译所有内容是一种很好的做法,但如果scons发现它不需要重建,那么实际上你应该什么都不发布。