c - 编译动态库时消除对 MinGW 特定 DLL 的依赖

标签 c dll static-linking mingw-w64 msys2

我正在使用 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/

相关文章:

cmake - 如何找到.so文件的库名?

c++ - 在源文件 (cpp) 中定义带有静态和内联的模板函数有哪些优势?

c++ - 使用dub输出C++可链接静态库

c - 使用fscanf和fprintf实现复制功能

字符数组内存分配

c - 读取一行中的单词并将它们放入数组中

c - 使用 OpenCV 检测小圆圈(图像质量差)

c++ - R CMD SHLIB 'undefined reference' 并且不为 SWIG 生成的 R 包装器生成 .so/.dll

java - 如何模拟对象指针

c# - 两个不同的进程可以共享相同的 DLL 数据吗?