Poly/MLのビルド 2
ちゃんと記録をとってなくて、記憶だが:
CONDITION_VARIABLEとは、Windowsが定義する型なのだが、
- gcc 4.6.2 付属のwindows.hでは定義されてない。
- gcc 4.9.3 付属のwindows.hでも定義されてない。
- gcc 5.1.0 (tdm-gcc) 付属のwindows.hでは定義されている。
よって、CONDITION_VARIABLEを使うには、tdm-gccを使う必要がある。別な選択肢として、MinGWのpthreadパッケージを入れる方法がある。
GitBash+TDB-GCCという環境でconfigureすると、システム判別に失敗する。まー、そりゃそうだろう。
MinGW環境でconfigureして、コンパイラだけTDM-GCCにすり替えてみた。intのサイズのせいか、C++の関数オーバーロードが曖昧になってしまう。int引数とlong引数で別な関数とみなされないから? さらに、アセンブラーのフェーズでレジスタサイズが違うとかのエラーもでる。Poly/MLのソースは64ビット向けには書かれてないようだ。
仮にコンパイラが通っても、time_tのサイズとかで問題が出る可能性もある。size_tとかもあるかな。よほど注意深く書かないと、32/64共通ソースは難しい。
今は、Git for Windowsのbash環境とTDM-GCCのgccを別々に入れて混ぜて使っているので、configureに認識させるのは難しい。そもそも、configureもうやめろよ! と言いたいが、、、
正統的なMinGW64環境を作るか、Cygwinか。Cygwin使いたくないし、Cygwinの64bitコンパイラがあるのか?
[追記]Poly/ML のコンパイル中に、http://stackoverflow.com/questions/14171955/incorrect-register-rbx-used-withl-suffix にあるのと同じエラーが出た。[/追記]