我继承了一个应用程序,它链接到一个可能是用gcc3构建的库。或者可以使用imagecraft编译器。这些信息现在已经消失在天国的位域中,我只剩下一个libXXX.a库来链接我的应用程序。我不能重新编译libXXX.a,因为它需要来自imagecraft和其他地方的某些未知标头,这些标头在某一时刻可能在我的环境中无处不在,但现在却无处可寻。
我的问题是,假设我用avr-gcc 3.4.0版(并链接到那个“特殊的”libXXX)编译我的应用程序产生了一个可工作的二进制图像,那么有理由期望我可以用avr-gcc 4编译我的应用程序的所有其他部分(这个操作有一些非常好的和被证明的好处),用libXXX链接还能得到一个正常工作的程序吗?
从本质上讲,这一切都可以归结为: avr-gcc二进制文件是否与“神秘的编译器X,这可能是avr-gcc 3.0的东西”兼容?
老实说,我已经成功地用avr-gcc4编译了我的应用程序的其余部分,并将其与库链接起来,并验证了结果是有效的,但是我应该注意什么样的副作用或怪癖?
发布于 2010-10-28 18:55:58
如果两个编译器使用相同的ABI (应用程序二进制接口),则来自不同编译器(或-versions)的链接库将可靠地工作。
特定平台的ABI通常由该平台的主要编译器指定,但这可以通过引用外部规范来完成。
ABI更改很少,特别是当平台支持第三方库/应用程序时,因为ABI更改意味着必须重新构建所有内容。
https://stackoverflow.com/questions/4040609
复制相似问题