从私有功能中删除“ static”会破坏ABI兼容性吗?

伊巴科斯

假设您正在处理需要保持ABI兼容性的库源。这个库有一个.c文件,它定义了如下static函数:

static int
wl_message_count_arrays(const struct wl_message *message)
{
    // ...
}

此函数未在任何导出的标头中公开,但我想在私有标头中公开。为此,无法标记该功能static删除static功能签名修饰符更改ABI吗?

甲肾上腺素

我认为有几点要考虑:

  • 它会改变ABI吗?

    是的,因为现在有了一个新的公共符号。static就ABI而言,添加新功能和从现有功能中删除之间没有区别

  • 它会破坏兼容性吗?

    它肯定是朝着另一个方向发展的:与新版本库链接的,使用新符号的程序将无法在旧版本库中运行。

  • 可以,但是要升级的旧库用户呢?

    在这种情况下,他们可能会自己定义一个具有相同名称的符号,从而导致与新库的冲突。从技术上讲,这是一个重大变化。

    但是,如果符号是“命名空间的”(例如,如果库中的所有名称都使用foo_前缀,而新符号也使用前缀),那么我会认为这一更改在道德上是不间断的,并且新的ABI与旧的兼容。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章