代码之家  ›  专栏  ›  技术社区  ›  Fredrik Ullner

GCC ABI兼容性

  •  25
  • Fredrik Ullner  · 技术社区  · 16 年前

    据我所知,不可能链接使用GCC应用程序二进制接口(ABI)不同版本的库。GCC的每个版本都有ABI变更吗?如果我使用GCC4.3.2,是否可以链接一个用4.3.1构建的库?是否有某种矩阵列出了我可以组合gcc版本的所有方法?

    3 回复  |  直到 10 年前
        1
  •  11
  •   linuxbuild    10 年前

    The official ABI page 指向一个 ABIcheck . 这个工具可以做你想做的。

        2
  •  17
  •   AProgrammer    16 年前

    由于GCC-3.4.0,ABI是向前兼容的。也就是说,使用较旧版本制作的库可以与较新版本链接,它应该可以工作(反之则不行)。很明显,可能有虫子,但只有 文件中提到: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33678

        3
  •  2
  •   user3603401    12 年前

    呃,艾克斯。
    你怎么知道哪个GCC编译了一个给定的二进制文件?这里是 来自GCC-4.7.2-1-mingw32.readme.txt的死亡通知:

    二进制不兼容注意事项!

    C和C++ ABI在GCC 4.7.0中发生变化,这意味着一般不能 将用此版本的编译器编译的二进制文件链接在一起 GCC 4.7.0之前的版本。特别地:

    • 默认情况下启用选项-mms位域,这意味着位域布局 遵循Microsoft编译器的惯例。

    • C++类成员函数现在遵循这个调用调用约定。

    • 编译器现在假设调用方弹出 指向聚合返回值的隐式参数。这种影响 按值返回结构的函数,如复杂的数学类型。