C 在编译动态库时消除对特定于MinGW的dll的依赖

C 在编译动态库时消除对特定于MinGW的dll的依赖,c,dll,static-linking,mingw-w64,msys2,C,Dll,Static Linking,Mingw W64,Msys2,我正在使用msys2编译一个使用autotools作为构建系统的库。最终结果是一个DLL。此DLL最终引用msys2附带的以下其他DLL: libgcc_s_seh-1.dll libstdc++-6.dll libwinpthread-1.dll 如何静态链接这些内容并消除这些依赖关系? 还有其他问题需要解决(),解决方案建议使用选项-static libgcc-static libstdc++。它们在链接.exe时起作用,但在链接.dll时似乎不起作用 在运行/configure之前,我

我正在使用msys2编译一个使用autotools作为构建系统的库。最终结果是一个DLL。此DLL最终引用msys2附带的以下其他DLL:

  • libgcc_s_seh-1.dll
  • libstdc++-6.dll
  • libwinpthread-1.dll
如何静态链接这些内容并消除这些依赖关系?

还有其他问题需要解决(),解决方案建议使用选项
-static libgcc-static libstdc++
。它们在链接
.exe
时起作用,但在链接
.dll
时似乎不起作用

在运行
/configure
之前,我设置了以下变量(并检查了输出,以验证这些编译器选项是否真的在使用),但是Dependency Walker仍然显示了对
libstdc++-6.dll
的依赖关系,就像以前一样

export CFLAGS="-static-libgcc -static-libstdc++" CXXFLAGS="-static-libgcc -static-libstdc++" LDFLAGS="-static-libgcc -static-libstdc++"
(我假设这些必须只包含在LDFLAGS中,但由于我没有完全理解,我还将它们添加到了CFLAGS和cxflags中。)

当链接DLL而不是EXE时,有没有办法摆脱这些依赖关系


库是用C和C++混合编写的,具有C API。

< P>在LDFLAGs中尝试使用<代码>静态< /COD>选项。我刚刚在MSYS2中测试了它,它对我很有效。

您在创建DLL或EXE时测试过它吗?它似乎阻止了DLL的创建。你是对的,它只在一个很小的例子中起作用。我需要找出编译此库时它不起作用的原因。请注意,在使用
-static
时,还需要链接依赖项的依赖项,以及它们的依赖项等等。如果库带有
.pc
文件,那么可以通过链接
pkg config--static--libs
的输出来解决这个问题。我们仍然在制作DLL,而不是静态库(.a),DLL包含对它们所依赖的DLL的引用。@DavidGrayson Windows的有趣之处在于,可以制作一个静态链接到其依赖项的DLL。因此,可以将
-static
-o-Wl,--out implib、.a
组合,然后可以将其与前面提到的
$(pkg config--static--libs)
组合。