%@ Register tagprefix="pt" tagname="header" src="../header.ascx" %>
<%@ Register tagprefix="pt" tagname="footer" src="../footer.ascx" %>
<%@ Register tagprefix="pt" tagname="wiki" src="../wiki.ascx" %>
ふつうのライブラリをふつうに使おうとすると、WindowsのAPIとか標準C++ライブラリを要求されてしまってちゃんと使うことができません。ただ、いろいろ工夫すれば使えるようになりますので、ここではその方法を紹介します。
STLport-5.0.0.tar.gz
decompress to: D:\Miscellaneous\STLport-5.0.0
D:\Miscellaneous\STLport-5.0.0\build\lib>nmake /fnmake-vc71.mak
lib += D:\Miscellaneous\STLport-5.0.0\lib
include += D:\Miscellaneous\STLport-5.0.0\stlport
namespace stlpmtx_std {
extern void __stl_throw_length_error(const char*) {}
}
STLport-4.6.2.tar.gz を使います。
コンパイル環境が整ったコマンドプロンプトを起動します。
cd C:\Miscellaneous\STLport-4.6.2 nmake clean all -f vc71.mak nmake install -f vc71.mak
$(VCInstallDir)include\stlport にヘッダがコピーされているので、必要なプロジェクトでこれを追加インクルード。ライブラリはVC++標準のとこにコピーされてしまうので、追加の設定は必要ありません。
STLportが使われる前に次の宣言がかならず有効になるようにしておきます。
#define _STLP_NO_IOSTREAMS 1 #define _STLP_NO_EXCEPTIONS #define _STLP_NO_EXCEPTION_SPEC #define __declspec(dllimport)
OSの開発しかしないのであれば、stlp_config.h だかなんだかに書いてしまってもよろしい。
定義のためのソースファイルを作って、欠けている定義を補ってやります。
boost_1_32_0.zip と boost-jam-3.1.10-1-ntx86.zip を使います。
コンパイル環境が整ったコマンドプロンプトを起動します。
set STLPORT_PATH=%MSVCDir%\include\stlport set INCLUDE=%STLPORT_PATH%;%INCLUDE% bjam "-sTOOLS=vc-7_1-stlport" --prefix="C:\Miscellaneous\boost" install
C:\Miscellaneous\boost\lib を必要なプロジェクトで追加インクルード。
C:\Miscellaneous\boost\include\boost-1_32 を必要なプロジェクトで追加インクルード。
iostreamを使うとリンクできなくなるので使わないでほしいのに、boostはどーしても使ってしまうみたい。仕方ないのでエラーがでる関数の定義を次のようなプリプロセットで囲んで無効化してしまいます。
#if !defined(_STLP_NO_IOSTREAMS) || !_STLP_NO_IOSTREAMS #endif
boost-1.32.0 で smart_ptr を使うときは二カ所ありました。
定義のためのソースファイルを作って、欠けている定義を補ってやります。