昨日の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でも発現するというのは一体どういうこと?
さて、結局どうすればいいんだろうか。