2010-10-28 61 views
2

我已经继承了一个应用程序,该应用程序链接到可能已经使用gcc3构建的库。或者用imagecraft编译器。这些信息现在已经消失在天堂般的位域中,我剩下一个libXXX.a库来链接我的应用程序。我无法重新编译libXXX.a,因为它需要来自imagecraft和某处的某些未知标题,这些标题可能在我的环境中无处不在,但现在无处可寻。avr-gcc 3.4.0与avr-gcc 4.3.x之间的二进制兼容性

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

本质上,它归结为:是avr-gcc二进制兼容“神秘的编译器X,它可能是avr-gcc 3.something”?老实说,我已经用avr-gcc4成功编译了我的应用程序的其余部分,并将它与库链接起来,并验证了结果的正确性,但是我应该寻找哪种副作用或怪癖? ?

+1

这似乎是提及你可能已经知道的一个合适的时机:备份和修订控制是你的朋友......但是你需要在过去使用它们来获得现在的好处。它永远不会太晚开始,你的未来自我会感谢你;-) – RBerteig 2010-10-28 07:27:04

+0

正如我所说,我继承了这种情况...自那时起修订控制已恢复,但它仍然无法帮助我:) – Manjabes 2010-10-28 07:32:55

回答

2

链接从不同的编译器(或-versions)库将可靠地工作,如果两种编译器使用相同的ABI(应用二进制接口)

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