2

我继承了一个链接到可能已经用 gcc3 构建的库的应用程序。或者也许使用 imagecraft 编译器。这些信息现在已经消失在天堂般的位域中,我只剩下一个 libXXX.a 库来链接我的应用程序。我无法重新编译 libXXX.a,因为它需要来自 imagecraft 和其他地方的某些未知头文件,这些头文件在某个时候可能在我的环境中无处不在,但现在无处可寻。

我的问题是,如果我使用 avr-gcc 版本 3.4.0 编译我的应用程序(并链接到那个“特殊”libXXX)会产生一个工作二进制映像,那么期望我可以编译所有其他部分是否合理?我的带有 avr-gcc 4 的应用程序(这个操作有一些非常好的和经过验证的好处),与 libXXX 链接并且仍然可以获得一个工作程序?

从本质上讲,这一切都归结为:avr-gcc 二进制文件是否与“可能是 avr-gcc 3.something 的神秘编译器 X”兼容?

老实说,我已经成功地用 avr-gcc4 编译了我的应用程序的其余部分并将其与库链接,并验证结果有效,但我应该注意什么样的副作用或怪癖?

4

1 回答 1

2

如果两个编译器使用相同的 ABI(应用程序二进制接口),则来自不同编译器(或版本)的链接库将可靠地工作

特定平台的 ABI 通常由该平台的主要编译器指定,但这可以通过引用外部规范来完成。
ABI 更改很少见,尤其是在平台支持第三方库/应用程序的情况下,因为 ABI 更改意味着实际上所有内容都必须重新构建。

于 2010-10-28T10:55:58.350 回答