为什么<iostream>依赖MinGW dll?

时间:2018-07-14 21:36:01

标签: c++ dependencies mingw c++-standard-library

我已经在Windows的Eclipse上使用g ++ 6.3.0-1编译了Hello World。如果找不到以下dll,该可执行文件将无法运行:

  • libgcc_s_dw2-1.dll
  • libstdc ++-6.dll

这是我的Hello World程序的代码:

#include <iostream>
using namespace std;

int main() {
    cout << "!!!Hello World!!!\n"; // prints !!!Hello World!!!
    return 0;
}

据我了解,MinGW尝试尽可能链接MS的标准dll。 为什么要针对自己的dll链接像iostream这样琐碎的东西?为什么Minstream的库中的iostream要求在MS的库中找不到?

1 个答案:

答案 0 :(得分:2)

<iostream>当然不是一件容易的事:标准的C ++ I / O系统本身并不太复杂,但是它使用std::locale及其方面也相当复杂。因此,它内置在共享库中。这样做可以部分完成,以便将生成的可执行文件作为非开放源代码提供:libstdc++受LGPL的保护,只能通过共享对象用于非开放源代码程序。

由于I / O和区域设置子系统使用C ++接口,因此没有选择使用系统实现的平台C ++ ABI。据我所知,微软没有发布其C ++ ABI,至少在过去的某个时候,它使用专利技术来防止其他编译器针对它。结果,gcc使用的C ++ ABI与MSVC ++不兼容。请注意,有一个可以使用的C ABI。