ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Oracle Solaris Studio 12.3: C++ ユーザーズガイド Oracle Solaris Studio 12.3 Information Library (日本語) |
libCstd の代替ライブラリを使用する場合は、標準ライブラリの STLport 実装を使用します。 libCstd をオフにして、STLport ライブラリで代用するには、次のコンパイラオプションを使用します。
-library=stlport4
詳細は、「A.2.49 -library=l[ ,l...]」 を参照してください。
このリリースでは、libstlport.a という静的アーカイブおよび libstlport.so という動的ライブラリの両方が含まれています。
STLport 実装を使用するかどうかは、次のことを考慮して判断してください。
STLport は、オープンソースの製品で、リリース間での互換性は保証されません。つまり、STLport の将来のバージョンでコンパイルすると、STLport 4.5.3 でコンパイルしたアプリケーションが破壊される可能性があります。また、STLport 4.5.3 を使用してコンパイルしたバイナリは、STLport の将来のバージョンを使用してコンパイルしたバイナリとリンクできない場合もあります。
stlport4、Cstd、および iostream のライブラリは、固有の入出力ストリームを実装しています。これらのライブラリの 2 個以上を-library オプションを使って指定した場合、プログラム動作が予期しないものになる恐れがあります。
コンパイラの将来のリリースには、STLport4 が含まれない可能性があります。STLport の新しいバージョンだけが含まれる可能性があります。コンパイラオプションの -library=stlport4 は、将来のリリースでは使用できず、STLport のそれ以降のバージョンを示すオプションに変更される可能性があります。
STLport では、Tools.h++ はサポートされません。
STLport は、デフォルトの libCstd とはバイナリ互換ではありません。STLport の標準ライブラリの実装を使用する場合は、-library=stlport4 オプションを指定してすべてのファイルのコンパイルおよびリンクを実行する必要があります。このことは、たとえば STLport 実装と C++ 区間演算ライブラリ libCsunimath を同時に使用できないことを意味します。その理由は、libCsunimath のコンパイルに使用されたのが、STLport ではなくデフォルトライブラリヘッダーであるためです。
STLport 実装を使用する場合は、コードから暗黙に参照されるヘッダーファイルをインクルードしてください。標準のヘッダーは、実装の一部として相互にインクルードできます (必須ではありません)。
エンドユーザーオブジェクトコードライセンスの条件に基づいて、実行可能ファイルまたはライブラリとともに再配布可能なライブラリおよびオブジェクトファイルの一覧は、再配布の README ファイルを参照してください。この README ファイルの C++ のセクションに、このリリースのコンパイラがサポートしている STLport.so のバージョンが記載されています。この README ファイルは、http://www.oracle.com/technetwork/server-storage/solarisstudio/overview/index.html にある、Oracle Solaris Studio ソフトウェアのこのリリースについての法的ページにあります。
次の例は、ライブラリの実装について移植性のない想定が行われているため、STLport を使用してコンパイルできません。特に、<vector> または <iostream> が <iterator> を自動的にインクルードすることを想定していますが、これは正しい想定ではありません。
#include <vector> #include <iostream> using namespace std; int main () { vector <int> v1 (10); vector <int> v3 (v1.size()); for (int i = 0; i < v1.size (); i++) {v1[i] = i; v3[i] = i;} vector <int> v2(v1.size ()); copy_backward (v1.begin (), v1.end (), v2.end ()); ostream_iterator<int> iter (cout, " "); copy (v2.begin (), v2.end (), iter); cout << endl; return 0; }
問題を解決するには、ソースで <iterator> をインクルードします。