2017-01-06 15 views
-2

私の以前の質問はHow to safely deploy an application built with an upgraded compilerでしたが、C++ 11の機能互換性についてはまだ疑問が残っています。 devtoolset-2を使用すると、gcc 4.8.2でビルドされるが、libstdC++。so.6.0.13にリンクされるアプリケーションは、完全なC++ 11機能をサポートするか、libstdC++ 6.0.19で共通のセットのみをサポートするか?C++ 11はGCCの異なるバージョンとの互換性を持っています

私は実際にこの点を理解するのは本当に分かりません。

+0

C++については忘れてしまいました。特定のコンパイラでコンパイルされたC++コードは、そのコンパイラの対応するライブラリにのみリンクすることができます。特定のバージョンのコンパイラでコードをコンパイルしたり、古いバージョンのライブラリとリンクしたり、何かが動作することを期待することはできません。 –

+0

これでdevtoolset-2の使い方は?この場合、無駄になります。 – Scab

答えて

2

このようなlibstdC++を混ぜ合わせるべきではないので、それは問題です。 devtoolset-2に付属しているlibstdC++を再配布し、具体的にリンクする必要があります。さもなければ、コンパイラと標準ライブラリはお互いに不一致になり、さらに彼らはあなたの質問に対する答えを知りません!

次に、GCC 4.8.2でサポートされているC++ 11の機能の一覧を参照してください。

+0

実際、私は、libstdC++とRedHatが提供するdevtoolset-2(ただし、私はcentosバージョンを使用しています)を使用してコンパイラをアップグレードし、システムlibstdC++を使用していることを理解していません。したがって、アプリケーションは同じバージョンのlibstdC++(6.0.13)でビルドされ、実行されます。 GCC 4.8はlibstdC++ 6.0.13と下位互換性があると思われますが、C++ 11機能のサポートについて質問します。 – Scab

+0

@Scab:libstdC++が無条件に下位互換性を持つ方法はわかりません。 'std :: thread'サポートはどこから来たのでしょうか?セマンティクスをコンテナに移動しますか?スタンダードライブラリに含まれる他のすべてのC++ 11の機能は?たぶん、GCCの開発者は、新しいコンパイラでは常に古い標準ライブラリの実装を使うことができるようにしていますが、その答えは "あなたが得ようとしているものは分かりません"と思います。だから私はそれを避けるだろう。 –

+0

このhttps://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.htmlによると、GCCのいくつかのバージョンは、古いバージョンのlibdstC++と互換性があることを理解しています。特に、マイナーバージョンの変更(6.0.13と6.0.19のように)。 Red Hatがそのdevtoolsetコレクションをリリースしたのはなぜなのでしょうか?だから私はcentosでC++ 11完全サポートが必要な場合6.7何ができますか? gcc 4.8.3を使用し、libstdC++ 6.0.19バージョンですか?また、centos 6.7にアプリケーションをデプロイするときに、適切なバージョンのlibc、libgcc_sですべての依存関係を展開しますか? – Scab

関連する問題