11

g++-4.7 と -std=c++0x を使用して、C++11 でアプリケーションを開発しています。
私のアプリは、g++-4.7 でコンパイルされた共有ライブラリに対してリンクされていますが、-std=c++0x ディレクティブはありません。

残念ながら、何も機能しません。つまり、外部ライブラリのクラスとメソッドを使用すると、奇妙な動作が発生します。(もちろん、 -std=c++0x なしでアプリをコンパイルしても問題ありません)。

  1. これは予期された動作ですか、それともコンパイラのバグですか?

  2. 回避策 ( externC キーワードのようなもの) はありますか?

4

1 に答える 1

12

標準ライブラリが変更され、-std=c++0xコンパイラ フラグによってライブラリのどの部分が使用されているかが決まります。同じプログラムで両方のバージョンを使用しようとすると、1 つの定義ルールに違反します (標準ライブラリで使用される各要素に対して、同じ識別子に対して 2 つの定義があります)。

この制限を克服するためにできる簡単なことはないと思います。ライブラリの 1 つのバージョンのみを使用するようにする必要があります (つまり、標準ヘッダーを含める前に適切なマクロを定義して、それらのライブラリ内で C++11 を無効にします)。 ODR を中断します (C++11 拡張機能が C++03 ライブラリ コードを異なる方法でコンパイルする場合)。

于 2012-04-04T15:20:19.267 に答える