共享库:在不破坏API兼容性的情况下打破ABI兼容性

时间:2014-06-06 08:26:35

标签: c api shared-libraries abi

对于纯C共享库,是否有可能在不破坏API兼容性的同时打破ABI兼容性?

另外,如果编写了一个库A,它提供了现有库B的所有API函数,还有一些额外的API函数,那么库A ABI是否与库B兼容?

2 个答案:

答案 0 :(得分:3)

如果能够回答您的第一个问题,您可以在实现相同API的两个库中使用不同的调用约定。

对于第二个问题:你可以改变,例如指向函数声明中另一个结构的指针的结构指针。根据标准,它们必须具有相同的表示和对齐要求,但API已更改(并且代码调用A的函数必须更改为在B中调用相同的函数才能编译)。

答案 1 :(得分:1)

第一个问题:如果“API兼容性”是指源兼容性,更改调用约定或用户定义类型的内容,则会执行此操作。

第二个问题:它可能取决于平台或编译选项,但它可以是。