1. 共有ライブラリを -std=c++0x または -std=g++0x でコンパイルした場合、ライブラリを使用するプログラムがこれらのスイッチを必要としないことが保証されますか (c++0x がない場合)ヘッダファイルの機能)?うまくいくように見えますが、将来の微妙な問題にサインアップしたくありません。
C++11 のサポートは、GCC 4.x リリースではまだ実験的でした (GCC 5 以降では実験的ではなくなりました)。動作を維持するように努めましたが、答えはノーです。通常、すべての場合に動作することは保証されていません。-std=c++0x
C++03 コードと C++11 コードが混在するプログラムで問題を引き起こす可能性がある、使用によって引き起こされる ABI の変更が多数あります。詳細については、http: //gcc.gnu.org/wiki/Cxx11AbiCompatibilityを参照してください。ライブラリがそのページに記載されているシンボルをエクスポートしていない場合は、問題ありません。
2. g++ 4.4 の C++11 の標準ライブラリは完全ではありません。標準ライブラリの多くはヘッダーのみであり、gnu のヘッダー ファイルは一般にバージョンの ifdef でいっぱいであるため、少なくとも libstdc++ のヘッダー ファイルのより新しいバージョンを使用する方法があると思います。ただし、別の .so を使用することはできません。私はこれを一緒にこすることができると確信していますが、このようなことを正しく行うことは可能ですか?
いいえ、それがうまくいく可能性はまったくありません。それ以降のバージョンのヘッダーは、4.4 でサポートされていない機能を使用しており、それらを使用できたとしても、新しい を使用する必要がありますlibstdc++.so
。いいえ。
ヘッダーはversion でいっぱいではありません。ほとんどの場合、使用時に G++ によって定義されて#ifdefs
いるチェックのみが見つかりますが、4.4 バージョンがラムダ、非静的データ メンバー初期化子、適切な右辺値参照セマンティクスをサポートしているわけではありません。 、デフォルト/削除された関数など、後のヘッダーで自由に使用できます。付属の GCC と同じバージョンの libstdc++ ヘッダーを使用する必要があります。__GXX_EXPERIMENTAL_CXX0X__
-std=c++0x
つまり、適切な C++11 サポートが必要な場合は、新しいコンパイラを使用する必要があります。
新しいコンパイラを使用できない場合、適切な C++11 サポートを取得できません。