我正在使用带有POSIX线程的MinGW-w64。我想用POSIX线程和共享库(在本例中为DLL)构建GNU gettext。但是,当构建依赖于具有MinGW / MinGW-w64的POSIX线程的运行时工件(例如DLL或可执行文件)时,最终会依赖于libwinpthread-1.dll
这些工件。在我的情况下,我想避免这种情况,并静态地将任何运行时工件链接到POSIX线程!在MinGW / MinGW-W64上唯一能做到这一点的方法是在链接阶段提供-static
标志。我之前已经完成了数百次,所以我知道它有效。
现在的问题是我必须处理臭名昭着的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
并且它对我的构建进行了以下操作:
--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
我们可以看到Autotools在未经我许可的情况下故意过滤掉-static
,并且有任何合理的理由这样做。
我尝试过各种各样的事情,甚至找到了:
link_static_flag="-static"
<{1>}文件中的。我试图将其更改为:
libtool
希望它会阻止link_static_flag=""
在libtool
标志出现时做出反应。不幸的是,还没有成功。这令人非常沮丧。
好的,Autotools大师,现在终于是时候发光了。