7

我正在使用带有 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的内容,并对我的构建执行以下操作:

  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
    

    正如我们所看到的,Autotools 在-static未经我许可和任何合乎逻辑的理由的情况下故意过滤掉了。

我尝试了各种方法,甚至发现:

link_static_flag="-static"

libtool文件中。我试图将其更改为:

link_static_flag=""

希望它可以防止在出现标志libtool时做出那样的反应。-static不幸的是,还没有成功。这令人难以置信的沮丧。

好的,Autotools 大师们,现在终于到了你大放异彩的时候了。

4

0 回答 0