Ale*_*aev 6 autoconf gcc mingw autotools 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>
Run Code Online (Sandbox Code Playgroud)
你猜怎么着?这个家伙以某种方式解析我已添加的内容-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
Run Code Online (Sandbox Code Playgroud)
正如我们所看到的,Autotools故意过滤掉了-static我未经许可和任何合理的理由.
我尝试过各种各样的东西,甚至发现:
link_static_flag="-static"
Run Code Online (Sandbox Code Playgroud)
在libtool文件中.我试图将其更改为:
link_static_flag=""
Run Code Online (Sandbox Code Playgroud)
希望它会阻止libtool像-static旗帜出现时那样作出反应.不幸的是,还没有成功.这令人难以置信地令人沮丧.
好的,Autotools大师,现在终于你的时间闪耀了.