com-1.2.3 をインストール

com-1.2.3 をインストールしようとすると以下のエラーが出ました。
GHC は Gtk2Hs 動作確認の出来ている 6.10.3。

Missing header file: include/WideStringSrc.h
Missing C libraries: kernel32, user32, ole32, oleaut32, advapi32

関数型プログラミング言語Haskell Part11」に対処例がありましたので、やってみますとOKでした。

391 :デフォルトの名無しさん[sage]:2009/12/27(日) 20:50:19
Haskell から COM にアクセスしてみたく、
Cabal で com-1.2.3 をインストールしようとしたのですが、エラーが出ました。

Missing header file: include/WideStringSrc.h
Missing C libraries: kernel32, user32, ole32, oleaut32, advapi32

調べてみたところ、これらのファイルがあるパスを
config ファイルの extra-include-dirs と extra-lib-dirs の項に
書き込んでコメントを外せばいいのではないかと思いました。

しかし、kernel32.lib らのライブラリ ファイルはあるのですが、
WideStringSrc.h ファイルがストレージ内に見あたりません。
Windows7 sdk をフルインストールしているのですが、ありませんでした。
(インデックス作成機能を切った状態で、
エクスプローラでストレージ内に検索をかけて探しました)

このファイルはどこからかダウンロードしてくるのでしょうか。

392 :デフォルトの名無しさん[sage]:2009/12/27(日) 20:59:47
com-1.2.3の中にあるでしょ?

393 :デフォルトの名無しさん[sage]:2009/12/27(日) 21:32:02
今、http://hackage.haskell.org/cgi-bin/hackage-scripts/package/com から
com-1.2.3.tar.gz を落としてきて中を見てみました。
たしかにありますね。

cabal\config ファイルに次の行を書いてみました。

extra-include-dirs: C:\Users\*名前*\Desktop\com-1.2.3.tar\com-1.2.3
extra-lib-dirs: C:\Program Files\Microsoft SDKs\Windows\v7.0\Lib

そして "cabal install com" を実行してみましたが、全く同じエラーが出ます。
kernel32.lib らも include/WideStringSrc.h も全てそのパスにあるのですが、
cabal は見てくれないのでしょうか。

394 :デフォルトの名無しさん[sage]:2009/12/27(日) 22:05:09
ライブラリは gcc が使うやつじゃないといけないのかと思い、
extra-lib-dirs に指定するパスを下記のものに変えてみましたが、
結果は同じでした。

C:\Program Files\Haskell Platform\2009.2.0.2\gcc-lib
395 :デフォルトの名無しさん[sage]:2009/12/27(日) 23:30:35

そのエラーはメッセージ通りじゃないケースが多いよ(↓参照)
http://article.gmane.org/gmane.comp.lang.haskell.cafe/68204

cabal のオプションに -v3 とかつけると原因が分かると思う
396 :デフォルトの名無しさん[sage]:2009/12/28(月) 01:05:02
>>392,395 アドバイスありがとうございました。
おかげさまで原因がわかり、ネット上の情報も参考にして、
無事インストールできました。

"cabal install com" でダウンロード+インストールはあきらめ、
com-1.2.3.tar.gz を展開して、その中で "cabal install" しました。

そのとき、com.cabal ファイルを2ヶ所修正しました。
[1つ目]
 Ld-options: --enable-stdcall-fixup --disable-stdcall-fixup
これはコメントアウトしました。
同じフラグの enable と disable を同時にすることに意味はないと判断しました。

[2つ目]
Includes: の StdTypes.h を WideStringSrc.h の前に移動させました。
そういえばC言語のインクルードは順番が大事だったので。

1つ目の修正が何となく気持ち悪いですが、とりあえずインストールはできました。
これから実際に使ってみます。