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
、ビルドに対して次のことを行います。
- DLL としてビルドされるべきであったすべての GNU gettext ライブラリ (
--enable-shared
およびが原因--disable-static
) が、静的ライブラリ/アーカイブとしてビルドされるようになりました。 すべての 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
-static
Autotools が、私の許可なしに、そしてそうする論理的な理由なしに、意図的に のみを除外していることがわかります。
私はさまざまなことを試しましたが、さらに見つけました:
link_static_flag="-static"
libtool
ファイルで。私はそれを次のように変更しようとしました:
link_static_flag=""
フラグが存在libtool
するときにそのような反応を防ぐことを願っています。-static
残念ながら、まだ成功していません。これは信じられないほどイライラします。
OK、Autotools の達人、いよいよあなたが輝く時が来ました。