奮闘・HDBC-postgresqlを動かすための調査(その2)
- 「HDBC-postgresqlが使うdylibのアーキテクチャがちがう」と言ってエラーを吐かれてしまい、PostgreSQLへの接続どころか関数の実行すら出来ない
- でもCPUアーキテクチャもあdylibもx86_64で、一致している
というところまでが前回。
調査を続けます。
Googleさんに「mach-o, but wrong architecture」で検索をかけた結果がこちら。
おお、同じ現象が、それも日本語のサイトが真っ先に出てくるではありませんか。
あんのたんのブログ : mach-o, but wrong architecture. を解決する
ありがたいことです。
さてこのサイトによると「x86_64、i386両対応の「ユニバーサルバイナリ」のライブラリをビルドしてやる必要がある」とあります。
今回がこの件に当てはまるかどうかは分からないのですが、試す価値はありそうな気がします。
というわけでPostgreSQLを再インストールすることにします。
PostgreSQLの再インストール
まずはPostgreSQLサーバのアンインストール。
sudo port uninstall postgresql83-server
次にPostgreSQLクライアント(?)がをアンインストール。
sudo port uninstall postgresql83
ちなみに先にクライアントをアンインストールしようとすると、postgresql83-serverに依存してるからそっちを先にアンインストールするように、と叱られます。
最後にPostgreSQLクライアントをインストール。大事なのは+universalオプションです。なお今回は8系の最新であるpostgresql84をインストールしました。
sudo port install postgresql84 +universal
インストールは問題なく成功。
ghciでconnectPostgreSQL関数を動かしてみる
Prelude> :m Database.HDBC.PostgreSQL
Prelude Database.HDBC.PostgreSQL> connectPostgreSQL ""
さて結果は・・・
Loading package bytestring-0.9.1.10 ... linking ... done. Loading package array-0.3.0.2 ... linking ... done. Loading package containers-0.4.0.0 ... linking ... done. Loading package transformers-0.2.2.0 ... linking ... done. Loading package mtl-2.0.1.0 ... linking ... done. Loading package old-locale-1.0.0.2 ... linking ... done. Loading package old-time-1.0.0.6 ... linking ... done. Loading package deepseq-1.1.0.2 ... linking ... done. Loading package text-0.11.0.6 ... linking ... done. Loading package time-1.2.0.3 ... linking ... done. Loading package convertible-1.0.11.0 ... linking ... done. Loading package utf8-string-0.3.7 ... linking ... done. Loading package HDBC-2.3.1.0 ... linking ... done. Loading package parsec-3.1.1 ... linking ... done. Loading package HDBC-postgresql-2.3.2.0 ... can't load .so/.DLL for: pq (dlopen(libpq.dylib, 9): image not found)
うーん、ダメだ!
というわけで調査は続く。