有没有办法在没有安装MinGW的情况下运行使用MinGW编译的.exe?

时间:2015-03-13 17:05:56

标签: mingw

我有一个使用g ++编译的.exe,它运行没有问题。但如果我想分发它,它将需要安装MinGW。有没有办法避免这种情况?

4 个答案:

答案 0 :(得分:0)

我使用MinGW-64头文件和库在Linux下交叉编译Windows应用程序。我静态链接二进制文件,以便我不必将.exe文件以外的任何内容发送到Windows框。我使用基于clang / LLVM的工具链(http://ellcc.org)来进行构建而不是gcc,但是gcc应该能够做同样的事情。我已经使用这种技术来编译所有ELLCC工具(C / C ++编译器,binutils,gdb),并且它运行良好。

答案 1 :(得分:0)

要使您的exe在其他Windows系统上运行,请对其进行静态编译,不要链接到dlls

是的,您可以使用mingw将代码编译为独立的.exe文件。 我这样做是在Linux上交叉编译c ++代码,然后在Windows计算机上运行它。

重点是,您必须静态链接。

  • 这可能包括链接到比动态情况下更多的库(比较此answer)。
  • 可能您需要标记-fPIC -static -static-libgcc -static-libstdc++
  • 对于链接到的所有库(即,在需要使用-lmylib格式的命令的任何地方),请确保系统的库路径中存在相应的文件libmylib.lib,并且该文件不是{ {1}}。您不能使用链接的dll编译独立代码。
  • 如果必须链接到libmylib.dll,则也可以重新分发它(与exe放在同一文件夹中),或者获取库的静态编译版本(这可能需要您自己编译库)。 。在linux上,有一些可用的mingw-packages静态版本。例如“ mingw32-LibRaw-static.noarch:MinGW Windows LibRaw库的静态版本”

有关g ++编译器和链接器选项的一些链接:

答案 2 :(得分:-1)

您的应用程序将在其他计算机上运行良好,无需安装MinGW;你需要的是从你的应用程序所依赖的MinGW编译器套件(可能是C ++库DLL,也可能是标准的C库DLL)中分发任何DLL。

请注意,这些DLL是根据GPL许可的,因此您的应用程序可能需要在兼容许可下获得许可; (IANAL,如果您计划商业发行,则需要寻求法律建议)。此外,您必须准备将GCC源(也可能是您自己的源)分发给可能会请求它的应用程序的任何用户。

答案 3 :(得分:-2)

我一直在寻找完全相同的解决方案。这是有效的:

  • 使用MinGW正常编译Windows可执行文件
  • 要在Windows上运行可执行文件,您需要以下DLL:

    • libgcc_s_seh-1.DLL
    • libssp-0.dll
    • 的libstdc ++ - 6.dll
    • libwinpthread-1.DLL

在我的系统上,我在/usr/x86_64-w64-mingw32/sys-root/mingw/bin/找到了它们。您的程序可能不需要所有。实验

以下部分不正确

对于MinGW licensing terms,似乎MinGW库是公共域 MIT许可,这意味着重新分发这些库绝对没有问题DLL - 只有开发工具由GPL涵盖。

<强>更新

因此,DLL的重新分配并不是直截了当的。我相信,我提到的许可条款是MinGW本身。在任何情况下,您都可以使用这些库,但重新分发需要额外注意,除非您的软件是根据符合GPLv3 +资格条款的许可证发布的运行时异常子句。如果我发现更多,我会更新答案。