我正在使用带有 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
的内容,并对我的构建执行以下操作:
- 所有应该构建为 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
正如我们所看到的,Autotools 在
-static
未经我许可和任何合乎逻辑的理由的情况下故意过滤掉了。
我尝试了各种方法,甚至发现:
link_static_flag="-static"
在libtool
文件中。我试图将其更改为:
link_static_flag=""
希望它可以防止在出现标志libtool
时做出那样的反应。-static
不幸的是,还没有成功。这令人难以置信的沮丧。
好的,Autotools 大师们,现在终于到了你大放异彩的时候了。