【发布时间】:2014-06-06 08:26:34
【问题描述】:
对于纯 C 共享库,是否有可能在不破坏 API 兼容性的情况下破坏 ABI 兼容性?
另外,如果一个库 A 提供了现有库 B 的所有 API 函数,以及一些额外的 API 函数,那么库 A ABI 是否与库 B 兼容?
【问题讨论】:
标签: c api shared-libraries abi
对于纯 C 共享库,是否有可能在不破坏 API 兼容性的情况下破坏 ABI 兼容性?
另外,如果一个库 A 提供了现有库 B 的所有 API 函数,以及一些额外的 API 函数,那么库 A ABI 是否与库 B 兼容?
【问题讨论】:
标签: c api shared-libraries abi
如果这回答了您的第一个问题,您可以在实现相同 API 的两个库中使用不同的调用约定。
对于第二个问题:您可以更改例如一个结构指针,指向函数声明中另一个结构的指针。根据标准,它们必须具有相同的表示和对齐要求,但是 API 发生了变化(并且调用 A 的该函数的代码必须更改为调用 B 中的相同函数才能编译)。
【讨论】:
第一个问题:如果“API 兼容性”是指源代码兼容性,那么更改调用约定或用户定义类型的内容会这样做。
第二个问题:这可能取决于平台或编译选项,但可以。
【讨论】: