Mingw-w64,libgcc_s_seh.dll的目的是什么?

时间:2017-10-13 10:58:53

标签: mingw-w64

使用Mingw-w64构建的库需要这些dll:

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

我想知道是什么,每个dll做什么?特别是libgcc_s_seh,是结构化异常处理吗?我以为mingw无法与seh合作。

为什么mingw需要总是用你的exe带来那些dll?

我想知道我是不是只是将视觉工作室用作Windows编译器而浪费我的时间。它虽然如此臃肿,9 gb用于安装。

1 个答案:

答案 0 :(得分:0)

  

特别是libgcc_s_seh,是结构化异常处理吗?我以为mingw无法使用seh。

较新版本的GCC(如果我是正确的话,4.8+)应支持MinGW上的SEH。

  

我想知道这是什么,每个dll做什么?

它们提供运行时和标准库。

  • libwinpthread :Windows上的PThreads实现(线程化)
  • libstdc ++ :C ++标准库(C / C ++库函数等)
  • libgcc_s_seh :异常处理(SEH)
  

为什么mingw需要总是用你的exe带来那些dll?

因为您的程序使用它们。如果你编写的程序没有线程,标准库和异常以及任何操作系统交互,你就不需要它们。

这些DLL带来了运行程序所需的一切。顺便说一句。这只是只是MinGW的事情,也发生在其他系统/编译器上。通常你只是不注意这一点,因为操作系统已经发布了库,例如。 MSVC库很可能在Windows机器上。 动态链接总是需要某种类型的库文件,在Windows上为.dll,在Linux上为.so

如果您的系统上有它,请使用ldd <your application>查看动态链接的库。

您可以将这些MinGW库安装到系统库或操作系统可以找到它的位置。这使您的程序可以使用它,您不再需要随每个应用程序一起发送它(避免重复)。

另一方面,另一个选择是静态链接它们。与动态链接不同,您不需要任何DLL;不利的一面是应用程序大小的增加(现在这三个库已经被解压缩到了exe中)。

  

我想知道我是不是只是将视觉工作室用作Windows编译器而浪费我的时间。

这取决于您的情况。但是我的回答可能会给你一些更多的见解。