Autoconf和Libtool对于静态连接非常顽固

时间:2013-10-18 19:55:36

标签: gcc mingw autotools autoconf libtool

我正在使用带有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,并且有任何合理的理由这样做。

  3. 我尝试过各种各样的事情,甚至找到了:

    link_static_flag="-static"
    
    <{1>}文件中的

    。我试图将其更改为:

    libtool

    希望它会阻止link_static_flag="" libtool标志出现时做出反应。不幸的是,还没有成功。这令人非常沮丧。

    好的,Autotools大师,现在终于是时候发光了。

0 个答案:

没有答案