[ C++で開発 ]
| 定義シンボル | 規定値 | |
_MSC_VER |
1500 |
|
Visual C++ 7.1以降のSTLライブラリは、hash_set, hash_mapといった標準C++以外の拡張が含まれています。これらは、stdext名前空間に入ります。
#include <hash_set> using stdext::hash_set;
#include <hash_map> using stdext::hash_map;
VC++ 9.0でBoostを使ってみましょう。
まず、Boost Consultingサイトから、Visual C++用オンライン・インストーラを入手します。
Boostのバイナリ版(オンラインインストーラによるダウンロードとインストール)がVisual C++ 7.1およびVisual C++ 8.0用にリリースされています。これを試してみましょう。まずはインストーラを実行し、コンパイラにVisual C++ 8.0をチェックし、とりあえず最小限でMultithread Debug DLLおよびMultithread DLLを選択してインストールします。
grergorianの簡単なプログラムを書いてビルドすると、コンパイル時に以下の警告が出ました。
Unknown compiler version - please run the configure tests and report the results 1>d:\lib\boost_1_34_1\boost\lexical_cast.hpp : warning C4819: The file contains a character that cannot be represented in the current code page (932). Save the file in Unicode format to prevent data loss
また、リンク時に以下のエラーが発生しました。
1>LINK : fatal error LNK1104: cannot open file 'libboost_date_time-vc80-mt-gd-1_34_1.lib'
libboost_date_time-vc80-mt-gd-1_34_1.libは、スタティック・リンク・ライブラリ版で、今回はインストールしていません。プロジェクト設定でDLLインポートライブラリのboost_date_time-vc80-mt-gd-1_34_1.libおよびそのパスを指定しても、上記エラーは発生します。boostのソースコード等でリンクするライブラリファイルが記述されているように思われます。
→config/auto_link.hppに、#pragma comment(lib, ...)の記述があります。DLLを使用するときは、プリプロセッサ定義で_DLL、または_RTLDLLかつBOOST_DYN_LINKを定義する必要があります。このとき、VC++プロジェクト設定のリンクするライブラリ名は不要です。
まず、SourceForgeサイトのBoost C++プロジェクト・ダウンロードページから、Boostのソースコードおよびビルドツールboost-jamをダウンロードします。
Boostのソースコードを、ビルド作業用のディレクトリに展開します。
C:\Users\torutk\work\boost_1_34_1
boost-jamに含まれるbjam.exe(バイナリ)を上記ディレクトリに置きます。
Boost 1.34.1は、VC++8.0までの対応です。nmakeコマンドでビルドする分には、VC++8.0の設定で問題ないと思われます。
メモ:bjam用設定ファイルでVC++に関係するファイルと、Boost利用アプリケーションをコンパイルする時に関係するファイルを以下に示します。ここに、9.0用の設定を足してみました。
tools/build/v2/tools/msvc.jam boost/config/compiler/visual.hpp boost/config/auto_link.hpp
ビルドを実行します。
C:\Users\torutk\work\boost_1_34_1> bjam --prefix=C:\lib\boost --toolset=msvc-9.0 install
:
C:\Users\torutk\work\boost_1_34_1>
--prefixで指定したディレクトリの下に、includeとlibのディレクトリが作成され、それぞれの下にヘッダーファイルとライブラリファイルがインストールされます。UNIXでのインストールを意識したディレクトリ階層になっているため、Windowsではちょっと変則的な気がします。
C:\lib\boost
+--- include
| +--- boost-1_34_1
| +--- boost
| +--- 各ヘッダーファイル、サブディレクトリ
+--- lib
+--- 各ライブラリファイル