我正在使用 msys2 编译一个使用 autotools 作为构建系统的库。最终结果是一个 DLL。该 DLL 最终引用了 msys2 附带的以下其他 DLL:
libgcc_s_seh-1.dll
libstdc++-6.dll
libwinpthread-1.dll
我如何静态链接这些并消除这些依赖关系?
还有其他问题处理此问题 (example),解决方案建议使用选项 -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 和 CXXFLAGS 中。)
有没有办法在链接 DLL 而不是 EXE 时摆脱这些依赖关系?
该库是用 C 和 C++ 混合编写的,并且有一个 C API。
最佳答案
尝试在 LDFLAG 中使用 -static
选项。我刚刚在 MSYS2 中对其进行了测试,它对我有用。
关于c - 编译动态库时消除对 MinGW 特定 DLL 的依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62156534/