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 実装を使用する場合は、コードから暗黙に参照されるヘッダーファイルをインクルードしてください。標準のヘッダーは、実装の一部として相互にインクルードできます (必須ではありません)。
-compat=4 によってコンパイルする場合には、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> をインクルードします。