何度でもハマりますこの組み合わせ。
今回はメインのマシンを Windows 7 64bit にアップデートしたので、
32/64 両方の環境を構築します。
STLport 5.2.1 のインストール
STLport 5.2.1 の Makefile が x86 環境用のクロスコンパイルに対応していないので、
難しいことは考えずに、ダウンロードしたソースを2か所に展開してお茶を濁すことに。
STLport-5.2.1 ├ x86 │ ├ build │ ├ doc │ └ x64 ├ build ├ doc
ほんとは stlport ディレクトリとか共有できるはずだけど…5MBにも満たないしいいよね?今時。
STLport 5.2.1 for x86
手順は id:Hossy:20091124:p1 このまま。特に変更点はなし。
なんか unit test の fail が増えたけど、フランスの通貨とか知らないから無視。
ググったらフランとかユーロらしい。へー。
念のために
> dumpbin /headers *.dll *.exe | grep machine
でみんな "14C machine (x86)" になっていることを確認。
STLport 5.2.1 for x64
x64 用のコンパイル環境で作業すること以外、基本的な手順は id:Hossy:20091124:p1 このまま。
ただし一か所だけ、コンパイル中に
../../src\allocators.cpp(683) : error C2039: '_M_next' : '_SLIST_ENTRY' のメンバではありません。 C:\Program Files (x86)\Microsoft Visual Studio 8\VC\PlatformSDK\include\ winnt.h(8218) : '_SLIST_ENTRY' の宣言を確認してください。
こんなエラーが出るので、メッセージ通り、src\allocators.cpp の 683 行目を
- _Obj* __next = __chunk->_M_next; + _Obj* __next = __chunk->Next;
こんな風に修正しておきます。
念のために
> dumpbin /headers *.dll *.exe | grep machine
でみんな "8664 machine (x64)" になっていることを確認。
なんか unit test の fail がもいっこ増えたけど知らない。
ソース読んで試したら
std::cout << -std::numeric_limits<float>::quiet_NaN() << std::endl;
が x86 版だと -nan なのに、x64 版だとなんか nan になる。
boost 1.47.0 のインストール
こちらは先人の方々が有用な情報を残してくれているのでそれらを参考に。
Life with open mind
http://www.softgate.jp/ja/portal/columns/42-column-cat-general/66-building-boost.html
まずはおなじみ、bjam のコンパイルから。
両方の環境で使いまわすのでどちらでもいいんですが、とりあえず x86 環境で
C:\boost> bootstrap.bat
と叩くだけ。なんか bjam.exe と b2.exe ができましたが...
C:\boost> md5sum bjam.exe b2.exe 9bffd927adf2d8feeddf0f00e46942a7 *bjam.exe 9bffd927adf2d8feeddf0f00e46942a7 *b2.exe
同じものらしいです。2文字削ってそんなに嬉しいか……?
boost 1.47.0 for x86
id:Hossy:20110615:p1 と同様に project-config.jam を編集します。
using msvc : 8.0 ; using stlport : 5.2 : C:\\STLport\\x86\\stlport : C:\\STLport\\x86\\lib ;
STL のインクルードパスはともかく、ライブラリパスを間違えないように注意。
C:\boost> bjam --build-dir=build\x86 --stagedir=stage\x86 --build-type=complete stdlib=stlport-5.2 --without-python --without-mpi -j2 address-model=32 stage
いつもは install を使うのですが、共存のために stage で留めておきます。
それとディレクトリが被らないように設定して、アドレスモデルも追加しておきます。
しばらくすると C:\boost\stage\x86\lib にバイナリがたくさんできます。
LIB と PATH 両方に設定するのを忘れずに。INCLUDE は C:\boost でOK。
boost 1.47.0 for x64
基本的に x86 と変わらず。
project-config.jam の編集。
using msvc : 8.0 ; using stlport : 5.2 : C:\\STLport\\x64\\stlport : C:\\STLport\\x64\\lib ;
ライブラリパスの x64 に注意。
で、x64 コンパイル環境でビルド。
C:\boost> bjam --build-dir=build\x64 --stagedir=stage\x64 --build-type=complete stdlib=stlport-5.2 --without-python --without-mpi -j2 address-model=64 stage
もろもろの数字が 64 に書き変わってるだけですね。
しばらくすると C:\boost\stage\x64\lib にバイナリがたくさんできます。
こちらも LIB と PATH に設定。
なんか昔は toolset に --toolset=msvc-8.0.amd64 とか指定してたようですが、
最新のドキュメントにはそんな記述はありませんでした。ただ address-model=64 を指定しろ、としか。
まあ、この辺ころころ変わるのはいつものことなので普通に公式情報に追従で。
http://www.dw-sapporo.co.jp/technology/tips/boost306e30b330f330a430eb65b96cd5-msvc8
http://www.boost.org/boost-build2/doc/html/bbv2/reference/tools.html#v2.reference.tools.compiler.msvc.64