このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

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 Windowsbash環境とTDM-GCCgccを別々に入れて混ぜて使っているので、configureに認識させるのは難しい。そもそも、configureもうやめろよ! と言いたいが、、、

正統的なMinGW64環境を作るか、Cygwinか。Cygwin使いたくないし、Cygwinの64bitコンパイラがあるのか?

[追記]Poly/ML のコンパイル中に、http://stackoverflow.com/questions/14171955/incorrect-register-rbx-used-withl-suffix にあるのと同じエラーが出た。[/追記]