Gauche icon indicating copy to clipboard operation
Gauche copied to clipboard

Look into removing dependency on winpthreads

Open shirok opened this issue 6 years ago • 4 comments

http://chaton.practical-scheme.net/gauche/a/2018/10/18#entry-5bc8fd7f-9c795

shirok avatar Oct 19 '18 00:10 shirok

本件ですが、以下の依存関係があるようでした。

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 への依存をなくそうとすると、それなりに苦労が必要になると思います。。。

Hamayama avatar Oct 20 '18 09:10 Hamayama

すいません LDFLAGS="-no-pthread" でよいとログに書いてありました。 ./configure の引数にこれを渡してもいけるようです。。。

Hamayama avatar Oct 20 '18 10:10 Hamayama

bdwgc が winpthread に依存しているかどうかですが、 成果物だけを見ると依存はしていないようです。 ただ #ifdef が複雑なので、環境によっては依存ができるのかもしれませんが。。。

Hamayama avatar Oct 20 '18 11:10 Hamayama

ありがとうございます。回避があまりに複雑になるようだったらわざわざ手間かけなくても良いんですが、上記3関数だけの問題ならちょっとやってみる価値はあるかなという気になっています。

shirok avatar Oct 20 '18 17:10 shirok