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

C++ 当.h文件更新时,是否应该更新库?,c++,header-files,C++,Header Files,我已经向我们的客户发送了我们的库(.a,.so)以及.h文件 现在我对.h文件做了一些更改。所以我的问题是,我是否需要发送更新后的.a,。这样或发送.h就可以了 客户将用旧的.h文件替换.h 这行吗?是的,你应该用.a/.so升级.h。例如,您更改了一些数据结构,使其变得更大/更小。只需更新头文件就可以得到堆损坏器错误。这取决于在.h文件中更新的内容 如果您更新了不需要重新编译的内容(例如,一些注释?),那么您可以只提供更新的.h文件 但是,总的来说,我认为为了安全起见,如果您更改了头文件,则最

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

现在我对
.h
文件做了一些更改。所以我的问题是,我是否需要发送更新后的
.a
。这样
或发送
.h
就可以了

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


这行吗?

是的,你应该用.a/.so升级.h。例如,您更改了一些数据结构,使其变得更大/更小。只需更新头文件就可以得到堆损坏器错误。

这取决于在.h文件中更新的内容

如果您更新了不需要重新编译的内容(例如,一些注释?),那么您可以只提供更新的.h文件


但是,总的来说,我认为为了安全起见,如果您更改了头文件,则最好重新编译整个模块(因此,您可能希望将对象和库二进制文件重新发送给客户端)。

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

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


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

要问自己的一个问题是:“SCON”会做什么

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


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

取决于更改。你做过什么事?您可以在您的环境中对此进行测试。我将继续假设客户正在使用您的库编程,因为如果不是这样,则向他们发送一个标题似乎毫无意义。类的成员函数的移动定义。。那是在课外。将其移动到类内,使其内联..哥们,如果您更改了它,您需要发送一个新库!-)更严重的是:类布局似乎已更改,因此即使您没有更改cpp文件,重新编译后生成的目标代码的外观也会有所不同(例如,比较两个版本的库导出的符号!)。重新阅读您的文章我现在不太确定,因为我认为您没有更改接口(API)但只是在类声明中移动了一个实现。嗯,我不确定在这种情况下vtable(如果有的话)是否会改变(前提是成员的顺序没有改变)。班级布局当然不会。不过,客户端代码显然可能会改变(这就是关键所在!)。广泛测试。。。