rroonga > rroonga, groonga 1.1.0 Windows向け実験メモ

rroonga.1.0 Windows向け実験メモ


(1) Linuxでクロスコンパイルしたgemの実験


インストールには成功しましたが、試しに自作アプリのgrenwebを起動しようとするとエラーが起きました。
↓みたいなエラーを吐きます(mecab.dllが入ってないから?)

Groonga::InvalidArgument at /
invalid argument: cannot open shared object file: No such file or directory: <c:\app\ruby187-mingw32\lib\groonga\plugins/tokenizers/mecab.dll> an: #<Groonga::Database id: <nil>, name: (anonymous), path: <c:/users/ongaeshi/grendb/grendb.db>, domain: (nil), range: (nil), flags: <>> plugin.c:291: grn_plugin_register_by_path()
Ruby 	./database.rb: in open, line 28
Web 	GET localhost/
 

また、gemファイルのサイズが私が手元で作ったgemよりも10倍ほど大きいようです。
私の方が4MBで、クロスコンパイルしたものは35MB位。

(2) configureオプションを変更


groonga make時のオプションを変更しました。
()./configure CC='i686-w64-mingw32-gcc' CFLAGS='-g -O0 -mno-cygwin' prefix='/c/users/ongaeshi/work/rroonga/vendor/local' i386-pc-mingw32
()./configure --host=i686-w64-mingw32 --prefix='/c/users/ongaeshi/work/rroonga/vendor/local'
 

coinfigure設定
groonga 1.1.0 configuration:
-----------------------
  Compiler:              i686-w64-mingw32-gcc
  CFLAGS:                -g -O2 -Wall -Wextra -Wno-unused-parameter -Wno-sign-compare -Wno-pointer-sign -Wno-missing-field-initializers -Wformat=2 -Wstrict-aliasing=2 -Wdisabled-optimization -Wfloat-equal -Wpointer-arith -Wdeclaration-after-statement -Wbad-function-cast -Wcast-align -Wredundant-decls  
  Libraries:                  -lm   -ladvapi32 -lws2_32
 
Paths:
  Install path prefix:   /c/users/ongaeshi/work/rroonga/vendor/local
 
Tokenizers:
  MeCab:                 no
 
Libraries:
  ZeroMQ:                no
  libevent:              no
  MessagePack:           no
 

コンパイル自体は成功!!
が、残念ながらpthreadへの依存は切れませんでした・・・。
なので、lib/Makefileや、src/Makefileへのパッチは継続で当てています。

以下はエラー時のログを抜粋したものです。

/bin/sh ../libtool --tag=CC --mode=link i686-w64-mingw32-gcc -fno-strict-aliasing -g -O2 -Wall -Wextra -Wno-unused-parameter -Wno-sign-compare -Wno-pointer-sign -Wno-missing-field-initializers -Wformat=2 -Wstrict-aliasing=2 -Wdisabled-optimization -Wfloat-equal -Wpointer-arith -Wdeclaration-after-statement -Wbad-function-cast -Wcast-align -Wredundant-decls -version-info 0:0:0 -no-undefined -mwindows -o libgroonga.la -rpath /c/users/ongaeshi/work/rroonga/vendor/local/lib io.lo str.lo nfkc.lo snip.lo query.lo store.lo com.lo ql.lo scm.lo ctx.lo hash.lo db.lo pat.lo ii.lo token.lo proc.lo expr.lo util.lo plugin.lo output.lo geo.lo -lm -ladvapi32 -lws2_32
libtool: link: rm -fr .libs/libgroonga.a .libs/libgroonga.dll.a .libs/libgroonga.la .libs/libgroonga.lai
libtool: link: i686-w64-mingw32-gcc -shared .libs/io.o .libs/str.o .libs/nfkc.o .libs/snip.o .libs/query.o .libs/store.o .libs/com.o .libs/ql.o .libs/scm.o .libs/ctx.o .libs/hash.o .libs/db.o .libs/pat.o .libs/ii.o .libs/token.o .libs/proc.o .libs/expr.o .libs/util.o .libs/plugin.o .libs/output.o .libs/geo.o -ladvapi32 -lws2_32 -mwindows -o .libs/libgroonga-0.dll -Wl,--enable-auto-image-base -Xlinker --out-implib -Xlinker .libs/libgroonga.dll.a
Creating library file: .libs/libgroonga.dll.a.libs/io.o: In function `grn_open':
/c/users/ongaeshi/work/rroonga/vendor/groonga-1.1.0/lib/io.c:1662: undefined reference to `__imp__pthread_mutex_init'
/c/users/ongaeshi/work/rroonga/vendor/groonga-1.1.0/lib/io.c:1662: undefined reference to `__imp__pthread_mutex_init'
.libs/io.o: In function `grn_pread':
/c/users/ongaeshi/work/rroonga/vendor/groonga-1.1.0/lib/io.c:1764: undefined reference to `__imp__pthread_mutex_lock'
/c/users/ongaeshi/work/rroonga/vendor/groonga-1.1.0/lib/io.c:1776: undefined reference to `__imp__pthread_mutex_unlock'
.
.
.
/c/users/ongaeshi/work/rroonga/vendor/groonga-1.1.0/lib/db.c:131: undefined reference to `__imp__pthread_mutex_init'
.libs/db.o: In function `grn_db_create':
/c/users/ongaeshi/work/rroonga/vendor/groonga-1.1.0/lib/db.c:79: undefined reference to `__imp__pthread_mutex_init'
collect2: ld returned 1 exit status
 
make[2]: *** [libgroonga.la] Error 1
make[2]: Leaving directory `/c/users/ongaeshi/work/rroonga/vendor/groonga-1.1.0/lib'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/c/users/ongaeshi/work/rroonga/vendor/groonga-1.1.0'
make: *** [all] Error 2

※ CFLAGSに -mno-cygwin を追加した方がいいような気もしたのですが、cygwin1.dllへの依存はなさそうなので様子を見ます。

(3) まとめ


実は、以前の私の設定は gcc -O0 の最適化無しになっていました。
今後は -O2 が入った新しいconfigureでコンパイルしようと思います。

クロスコンパイル版は動かなかったので、
今回は私が手元で作ったものをgem pushしようと思います。









タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2011年02月16日 00:57
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。