首页 > 解决方案 > 为什么依赖MinGW dll?

问题描述

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

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

#include <iostream>
using namespace std;

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

据我了解,MinGW 会尽可能地尝试链接 MS 的标准 dll。为什么它会链接到自己的 dll 以获取像 iostream 这样微不足道的东西?在 MS 的库中找不到的 MinGW 库中的 iostream 需要什么?

标签: c++dependenciesmingwc++-standard-library

解决方案


<iostream>这当然不是微不足道的:标准 C++ I/O 系统本身并不太复杂,但它的使用std::locale及其方面相当复杂。因此,它内置于共享库中。这样做的部分原因是生成的可执行文件可以作为非开源程序发布:libstdc++被 LGPL 覆盖,只能通过共享对象用于非开源程序。

由于 I/O 和语言环境子系统使用 C++ 接口并且没有平台 C++ ABI 使用系统实现不是一个选项。据我所知,微软没有发布它的 C++ ABI,至少在过去的某个时候它使用了专利技术来防止其他编译器瞄准它。因此 gcc 使用的 C++ ABI 与 MSVC++ 不兼容。请注意,定义了一个可以使用的 C ABI。


推荐阅读