STLportを使おう


はじめに

STLportとはSGIのSTLをベースに開発されたフリーのSTLライブラリです。

ですが、今入手できるバージョン(4.6)ではメモリリークが発生します。そこで、メモリリークが起きない使い方の提案。

どうやって使うか

まずは、STLportから入手したアーカイブを解凍します。僕は、「C:\STLport-4.6」に展開しています。以下の説明は、このディレクトリを基本としているので違うディレクトリにインストールした人は自分の環境に読み替えてください。

STLportのForumの過去ログを見る限り、SGIのallocatorがメモリリークするらしいので、「C:\STLport-4.6\stlport\stl\_site_config.h」ファイルから

// #define _STLP_USE_NEWALLOC 1

という箇所を探してコメントアウトになっているのをはずします。これで、SGIのallocatorを使わないようになるので、コレクション系やstringはメモリリークをしなくなります。

その後、iostreamなどのライブラリをビルドします。コマンドプロンプトを開いて、「C:\STLport-4.6\src」へ移動し、ここへ(VCのインストールディレクトリ)VC98\Bin\VCVARS32.BATをドラッグアンドドロップし、Returnを押して環境変数を登録します。その後、

C:\STLport-4.6\src>nmake -f vc6.mak

として、待てばライブラリが「C:\STLport-4.5.3\lib」に作られます。

C:\STLport-4.6\src>nmake -f vc6.mak install

とすると、dllをsytem32にインストールなどをしてくれますが、バージョンアップの時にDLLのゴミが残りそうなので、僕は「C:\STLport-4.6\lib」にパスを通して、installをするのをやめました。

以上でライブラリの準備は完了です。後はVCの「ツール」-「オプション」で表示されるダイアログの「ディレクトリ」タブを選択し、「表示するディレクトリ」のコンボボックスで「インクルードファイル」を選択しておいて、先頭に「C:\STLport-4.6\stlport」というのを以下のように追加します。追加した後、一番上へ移動しておいて下さい。。そうしないと、VC標準の物が使われてしまいます。

次にライブラリのパスも同様に追加しておきます。

これで準備は完了です。実際に動かすと、stream系のヘッダをインクルードするとメモリリークが検出されますが、これはロケールなどの文字列が解放されていなためのようです。これは、メモリリークではありますが、これ以上値が増える訳でもないので、無視してかまわないようです。

僕個人の意見としては、デバグ時に自分のメモリリークと分かりにくくなるから、後始末したいんですけどね・・・。