【问题标题】:Using shared objects compiled with a newer version of g++使用用较新版本的 g++ 编译的共享对象
【发布时间】:2011-05-04 19:11:46
【问题描述】:

我有一些必须使用 g++4.5 编译的共享对象,我希望它们能够链接到使用 g++4.1 和 g++4.2 编译的应用程序中。

据我了解,他们不保证不同版本的 libstdc++ 将相互兼容,因此如果不进行一些更改,这将无法正常工作。

除了在目标机器上安装较新版本的 g++ 及其相关库之外,有没有一种标准方法可以做到这一点?

【问题讨论】:

    标签: c++ linux g++ shared-libraries libstdc++


    【解决方案1】:

    只要架构相同,并且您没有使用新版本独有的功能,共享对象应该可以正常工作。

    【讨论】:

    • 我不知道,不仅 C++ ABI 可能发生了变化(虽然我听说在 g++ 中它相当稳定),而且 libstdc++ 的内部很可能在 4.2 和 4.5 之间发生了变化,因此,如果在库和客户端之间传递了一些已更改的 std::* 类型,则可能会开始发生坏事。
    【解决方案2】:

    只是测试它并查看它是否有效(使用不匹配的 GCC 版本)怎么样?如果它有效,则无需为此烦恼任何特别的麻烦。也就是说,除非你在这里处理生命支持系统,但我猜不是。

    如果 STL 容器等通过库的 API 传递,您在实践中更有可能遇到问题。如果库仅在内部使用 STL,则它可以“正常工作”。

    【讨论】:

      猜你喜欢
      • 2018-03-31
      • 2010-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-11
      相关资源
      最近更新 更多