我正在开发一个小型项目(适用于 Windows)并且应该是可移植的。我在某个地方看到 MinGW 摆脱了目标系统上某些 .dll 的要求,所以我想我会试一试。令我吃惊的是,当我尝试在 friend 的计算机上运行我的程序时,出现两个错误,指出缺少 2 个不同的 .dll。我以为MinGW用的是系统dll,但显然不行。我看到一篇关于如何使用 Visual Studio 制作独立 exe 的文章,但我更喜欢使用 MinGW,因为它很简单。
所以我的问题是:如何使用 MinGW 生成独立的 exe?
注意:我只使用标准库,但如果知道如何为 future 的项目包含其他库会更好。
如果您想了解我所说的独立 exe 的示例,putty 就是一个很好的示例(它是 Windows 的 ssh 客户端)。
最佳答案
您需要的两个库很可能是 libgcc_s_sjlj-1.dll
和 libstdc++-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/