在编译动态库时,消除对MinGW专用DLL的依赖性。

问题描述 投票:2回答:1

我正在使用msys2编译一个使用autotools作为构建系统的库。最终的结果是一个DLL。这个 DLL 最终会引用到 msys2 中的其他 DLL。

  • libgcc_s_seh-1.dll
  • libstdc++-6.dll
  • libwinpthread-1.dll

我怎样才能静态地链接这些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和CXXFLAGS中。)

在链接DLL,而不是EXE时,有没有办法去掉这些依赖关系?

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

c dll static-linking mingw-w64 msys2
1个回答
1
投票

试着只使用 -static 选项的LDFLAGs。 我刚才在MSYS2中测试了一下,对我来说是可行的。

© www.soinside.com 2019 - 2024. All rights reserved.