Gauche
Gauche copied to clipboard
Look into removing dependency on winpthreads
http://chaton.practical-scheme.net/gauche/a/2018/10/18#entry-5bc8fd7f-9c795
本件ですが、以下の依存関係があるようでした。
libgauche-0.97.dll
libwinpthread-1.dll
clock_getres (src/system.c で使用)
clock_gettime (src/system.c で使用)
sched_yield (src/system.c で使用)
あまりよくは理解していませんが、 MSYS2 の提供する MinGW-w64 のスレッドモデルが threads=posix であるため、 特にリンクを指定しなくても libwinpthread-1.dll 内の関数が使用可能であり、 使用すると dll への依存ができるようです。
簡単な回避方法としては、 src/mingw-dist.sh の ./configure の後に以下を追加して、 (make の実行前に) config.h を書き換えることが挙げられると思います。
sed -i -e '/HAVE_CLOCK_GETRES/d' \
-e '/HAVE_CLOCK_GETTIME/d' \
-e '/HAVE_SCHED_YIELD/d' \
src/gauche/config.h
(これで gosh.exe が libwinpthread-1.dll に依存しなくなることを確認しました)
ただ、mbedTLS (libgcc_s_seh-1.dll に依存) のときもそうでしたが、 基本的に MSYS2 のパッケージが dll を使う方針であるため (全部スタティックリンクにするとパッケージの容量が増えるためだと思う)、 dll への依存をなくそうとすると、それなりに苦労が必要になると思います。。。
すいません LDFLAGS="-no-pthread"
でよいとログに書いてありました。
./configure の引数にこれを渡してもいけるようです。。。
bdwgc が winpthread に依存しているかどうかですが、 成果物だけを見ると依存はしていないようです。 ただ #ifdef が複雑なので、環境によっては依存ができるのかもしれませんが。。。
ありがとうございます。回避があまりに複雑になるようだったらわざわざ手間かけなくても良いんですが、上記3関数だけの問題ならちょっとやってみる価値はあるかなという気になっています。