C++ - 如何使使用 MinGW 独立编译的程序?

标签 c++ compilation mingw standard-library

我正在开发一个小型项目(适用于 Windows)并且应该是可移植的。我在某个地方看到 MinGW 摆脱了目标系统上某些 .dll 的要求,所以我想我会试一试。令我吃惊的是,当我尝试在 friend 的计算机上运行我的程序时,出现两个错误,指出缺少 2 个不同的 .dll。我以为MinGW用的是系统dll,但显然不行。我看到一篇关于如何使用 Visual Studio 制作独立 exe 的文章,但我更喜欢使用 MinGW,因为它很简单。

所以我的问题是:如何使用 MinGW 生成独立的 exe?

注意:我只使用标准库,但如果知道如何为 future 的项目包含其他库会更好。

如果您想了解我所说的独立 exe 的示例,putty 就是一个很好的示例(它是 Windows 的 ssh 客户端)。

最佳答案

您需要的两个库很可能是 libgcc_s_sjlj-1.dlllibstdc++-6.dll 或者它们的一些变体,具体取决于您的 mingw 是如何配置的它被 build 了。这些是 C 和 C++ 标准库实现。

如果需要,您可以在链接最终可执行文件 -static-libgcc-static-libstdc++ 时将额外的标志传递给编译器,这将导致它以静态方式链接这些库,而不是要求您使用可执行文件为它们分发 DLL。

更多信息在这里:Mingw libgcc_s_sjlj-1.dll is missing

一般来说,您总是可以尝试将库静态链接到您的可执行文件中。这些特殊的-static-libgcc标志是mingw只提供的特殊标志,其他编译器没有,其他库也没有,你对其他库使用不同的-static语法.静态链接很好,但随着依赖关系变得更加复杂,它变得更加复杂且容易出错。静态链接有一些与库链接顺序相关的缺陷。在某一点之后,让它们全部共享并且不做任何静态链接通常更简单。这取决于您,这取决于您的项目变得有多复杂/您是否开始遇到问题。

关于C++ - 如何使使用 MinGW 独立编译的程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33907814/

相关文章:

javascript - 如何使用 typescript 文件运行 gulp

qt - 让 Qt Creator 使用 MinGW

c++ - 初始化变量之前是否调用了父类构造函数?

c++ - clang++ C++0x std::locale

c++ - 具有公共(public)访问权限的成员指针的前向声明

c++ - Python ImportError - undefined symbol - 用于自定义 C++ 模块

将 Haskell 程序编译为 C

c++ - 为什么在没有模板声明编译的情况下包含在模板类中使用模板参数的友元函数的实现?

c++ - 如何在 Windows 上的 MinGW 中更新 GCC?

mingw - 如何使用MinGW运行./configure?