avr-gcc 3.4.0和avr-gcc 4.3.x之间的二进制兼容性

时间:2010-10-28 07:13:29

标签: c gcc avr avr-gcc binary-compatibility

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

我的问题是这个,只要我用avr-gcc版本3.4.0编译我的应用程序(并链接到那个“特殊的”libXXX)就会产生一个正常工作的二进制图像,是否合理期望我可以编译所有的我的应用程序的其他部分与avr-gcc 4(此操作有一些非常好的和证明的好处),与libXXX链接,仍然得到一个工作程序?

基本上,这一切归结为:avr-gcc二进制兼容“神秘的编译器X,它可能是avr-gcc 3.something”?

老实说,我已经用avr-gcc4成功编译了我的应用程序的其余部分,并将其与库相关联,并验证结果是否有效,但是我应该注意哪种副作用或怪癖?

1 个答案:

答案 0 :(得分:2)

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

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