7

POSIX スレッドで MinGW-w64 を使用しています。GNU gettext を POSIX スレッドで共有ライブラリ (この場合は DLL) としてビルドしたいと考えています。ただし、MinGW/MinGW-w64 を使用して POSIX スレッドに依存するランタイム アーティファクト (DLL や実行可能ファイルなど) をビルドすると、これらのアーティファクトが に依存することになりlibwinpthread-1.dllます。私の場合、それを避けて、ランタイム アーティファクトを POSIX スレッドに静的にリンクしたいと考えています。MinGW/MinGW-w64 でこれを行う唯一の方法は-static、リンク段階でフラグを指定することです。私はそれを何百回も行ってきたので、うまくいくことを知っています。

今の問題は、悪名高い Autotools に対処しなければならないことです。これらの Autotools は、まったく柔軟性がなく、友好的ではなく、使いにくいことが再び証明されました。では、次のように説明します。

LDFLAGS="-static-libgcc -static-libstdc++ -static" ../configure --build=x86_64-w64-mingw32 --disable-static --enable-shared --disable-java --disable-native-java --enable-relocatable --enable-threads=posix --prefix=<prefix>

何だと思う?この男は、私が追加したものを何らかの形で解析し-static、ビルドに対して次のことを行います。

  1. DLL としてビルドされるべきであったすべての GNU gettext ライブラリ (--enable-sharedおよびが原因--disable-static) が、静的ライブラリ/アーカイブとしてビルドされるようになりました。
  2. すべての GNU gettext 実行可能ファイルは-static、それらを に依存させるものを除外して構築されてlibwinpthread-1.dllいます。たとえば、次のようになります。

    gcc -pipe -Wall -Wextra -O3 -static-libgcc -static-libstdc++ -o test-lock.exe test-lock.o lock.o threadlib.o -lpthread
    

    -staticAutotools が、私の許可なしに、そしてそうする論理的な理由なしに、意図的に のみを除外していることがわかります。

私はさまざまなことを試しましたが、さらに見つけました:

link_static_flag="-static"

libtoolファイルで。私はそれを次のように変更しようとしました:

link_static_flag=""

フラグが存在libtoolするときにそのような反応を防ぐことを願っています。-static残念ながら、まだ成功していません。これは信じられないほどイライラします。

OK、Autotools の達人、いよいよあなたが輝く時が来ました。

4

0 に答える 0