HSDL
CabalとHSCについて知ったので、
GHC6.4では使えなくなっていたHSDLを
( http://fxp.hp.infoseek.co.jp/haskell/HSDL/ )
Cabalに対応したり、いろいろした。
とりあえずGHC6.4で動くようになったので、これでよしとする。
というわけで、わき道にそれたが、
HSQLも微妙に進展した。ソース中の
#if defined(_WIN32_)
というところを
#if defined(_WIN32)
に直すと、とりあえずコンパイルはできるようになった。
これが分かるまでどれだけ苦労したか…。
というわけで、一応コンパイルはできたが、
次はリンクができない。
もう本当にどうすれば良いのか。
昨日のHSQL
いろいろやっているうちになんとかリンクはできるようになった。
とりあえず、前段階で何でリンクできなかったかというと、
GHCが持ってるmingwにWindowsネイティブ版MySQLのライブラリが
リンクできなかったということ。
mingwに渡せるライブラリを作ることはほぼ不可能っぽいので、
DLL版のほうからインポートライブラリを作成して
ごちゃごちゃやればいけた。
というか、ここに書いてあった。
http://www.synnottsoftware.com/tutorials/mysqlwindows.php
Cygwin or mingwでWindows版MySQLとリンクする方法だ。
で、リンクできたは良いものの、
connectを呼び出すと落ちる。
main.exe: internal error: resumeThread: thread not found Please report this as a bug to glasgow-haskell-bugs@haskell.org, or http://www.sourceforge.net/projects/ghc/
thread not found てどういうことやねん。
これは、
{- OPTIONS -fffi -} #include <ghcconfig.h> import Foreign import Foreign.C #include <windows.h> #include <mysql.h> type MYSQL = Ptr () foreign import ccall "mysql.h mysql_init" mysql_init :: MYSQL -> IO MYSQL main = do pMySQL <- mysql_init nullPtr return ()
のような簡単なソースでも落ちるので、
多分GHCからmysql_initを呼び出すと起こってしまうのだろう。
こんなのどうすればいいのか、
というわけで、調べてみたら、こんな記事が見つかった。
http://www.mail-archive.com/glasgow-haskell-bugs@haskell.org/msg05881.html
投稿日二年前なんだけど。
いやいや、すぐ直すって書いてあるやん。
というか、6.2で直ってるって書いてあるのに、
6.4でも発現するというのは一体どういうこと?
さて、結局どうすればいいんだろうか。