假设您正在处理需要保持ABI兼容性的库源。这个库有一个.c文件,它定义了如下static
函数:
static int
wl_message_count_arrays(const struct wl_message *message)
{
// ...
}
此函数未在任何导出的标头中公开,但我想在私有标头中公开。为此,无法标记该功能static
。删除static
功能签名的修饰符会更改ABI吗?
我认为有几点要考虑:
它会改变ABI吗?
是的,因为现在有了一个新的公共符号。static
就ABI而言,添加新功能和从现有功能中删除之间没有区别。
它会破坏兼容性吗?
它肯定是朝着另一个方向发展的:与新版本库链接的,使用新符号的程序将无法在旧版本库中运行。
可以,但是要升级的旧库用户呢?
在这种情况下,他们可能会自己定义一个具有相同名称的符号,从而导致与新库的冲突。从技术上讲,这是一个重大变化。
但是,如果符号是“命名空间的”(例如,如果库中的所有名称都使用foo_
前缀,而新符号也使用前缀),那么我会认为这一更改在道德上是不间断的,并且新的ABI与旧的兼容。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句