gcc 4.4.7を含むCentOS 5.8はlibstdc ++ 6.0.8にリンクされています。どうやってこれができますか?

gcc 4.4.7を含むCentOS 5.8はlibstdc ++ 6.0.8にリンクされています。どうやってこれができますか?

~によるとgcc ABIポリシー、gcc 4.4.7はlibstdc ++ 6.0.13に依存する必要があります。私が理解しているように、コンパイラのバージョンとlibstdc ++のバージョンは密接に関連付けられており、互換性がありません。だから、次の事実を知って驚きました。

  • CentOS 5.8は、とにかく基本システム(gcc-4.1.2ベース)に付属の6.0.8に関連付けられているgcc44パッケージを管理します。
  • コンパイラディレクトリ(/usr/lib/gcc/x86_64-redhat-linux6E/4.4.7、ここでlibstdc++-6.0.13を見つけることが期待されています)のlibstdc ++.soは、どのような共有オブジェクトへのリンクではありません。テキストファイルを含めるINPUT ( -lstdc++_nonshared /usr/lib64/libstdc++.so.6 )

ここでどんな魔法が起こっているのでしょうか?

具体的には:

  • 以前のバージョンのlibstdc ++に接続するgcc 4.4.7をどのように提供しますか?これは不可能だと思います。
  • このstdc++_nonsharedライブラリは何ですか?
  • 私は.soファイルにそのテキストを含めることができることを知りませんでした。誰がそれを分析し(私の推測では動的リンカー)、その仕様と結果は何ですか?
  • この魔法はどこまで行けますか? libstdc++ 6.0.3でgcc4.7を使用できますか?互換性の範囲は何ですか

ベストアンサー1

これにより、rpm -q --requires gcc44次のようになります。

libstdc++.so.6()(64bit)
libstdc++.so.6(CXXABI_1.3)(64bit)
libstdc++.so.6(GLIBCXX_3.4)(64bit)

したがって、rpm自体には6.0.13の明示的なバージョン依存関係はありません。

見つかったように、libstdc++.so.6 は libstdc++-4.1.2-53.el5 に属します。

このバージョン4.1.2はRedHatでは実質的な意味を持ちません。新しいバージョンのバックポートも含まれます。

これを見てくださいrpm -q libstdc++ --changelog|more::

* Fri Mar 23 2012 Jakub Jelinek <[email protected]> 4.1.2-53.el5
- backport N2179 exception propagation support to improve
  gcc44 as well as Developer Toolset (#806275)

明らかにRedHatは、このバージョンがgcc44と互換性があるように積極的にパッチを当てています。

おすすめ記事