【问题标题】:Binary compatibility between avr-gcc 3.4.0 and avr-gcc 4.3.xavr-gcc 3.4.0 和 avr-gcc 4.3.x 之间的二进制兼容性
【发布时间】:2010-10-28 07:13:28
【问题描述】:

我继承了一个链接到一个可能已经用 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 编译了我的应用程序的其余部分并将其与库链接,并验证结果有效,但是我应该注意什么样的副作用或怪癖?

【问题讨论】:

  • 这似乎是一个提及您可能已经知道的事情的好时机:备份和修订控制是您的朋友......但您需要在过去使用它们才能获得现在的好处.开始永远不会太晚,你未来的自己会感谢你;-)
  • 正如我所说,我继承了这种情况......从那时起修订控制已恢复,但它仍然没有帮助我:)

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2015-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多