在 windows 下在 mingw 上创建项目

creating a project on mingw under windows

我正在 windows 下使用 mingw 创建一个项目。在另一台PC上运行时(分别在PATH中没有wingw),报错,缺少:libwinpthread-1.dll、libgcc_s_seh-1.dll、libstdc++-6.dll。如何构建项目才能正常启动?

C++ 程序需要 运行时间库 到 运行。它们通常不是程序本身的一部分!因此,您需要将这些库与您的程序一起发布(这是大多数软件所做的)。

然而,对于很多事情,您也可以使用“静态链接”,这意味着您的程序使用的库部分包含在您的程序本身中!提供给项目中 executable-generating 步骤的 -static 标志将执行此操作。如果你的程序只包含一个文件,那就是 g++ -o test -static test.c(你的 g++ 可能被称为 x86_64-w64-mingw32-g++ 左右)。

如果您分发的 .exe 文件不会 运行 因为缺少 .dll 文件,那是因为它链接到这些文件,您需要将这些文件与您的 .exe 文件。

但实际上这个问题有两种解决方案:

  • 共享构建(= 使用 .dll 文件):将 .dll 文件与您的应用程序一起分发。放置 .dll 文件的最佳位置是与 .exe 文件位于同一文件夹中。您可以使用 Dependency Walker to figure out which .dll files your .exe file needs (and which .dll files those .dll files need etc.) or you can use the command line tool copypedeps -r from the pedeps project 复制您的 .exe 文件以及所需的任何 .dll 文件。
  • Static build(=所有内容都包含在 .exe 文件中):在构建 .exe 文件时使用 --static 链接器标志(如果需要,还有 -static-libgcc and/or -static-libstdc++)。这将创建一个静态 .exe 文件,这意味着所有静态库都将汇总到 .exe 文件中。这可能会使您的 .exe 非常大(尽管您可以尝试使用 strip 命令或 -s 链接器标志来减小它的大小)并且没有 .dll 的优势公共代码只分发一次的文件。这也可能导致您的应用程序加载时间更长,因为所有内容都是一次加载的。