我正在开发一个小型且应该可移植的项目(适用于Windows)。我在某个地方看到MinGW摆脱了目标系统上某些.dll的要求,所以我想我会试一试。令我惊讶的是,当我尝试在朋友的计算机上运行我的程序时,我得到两个错误,说有两个不同的.dll丢失了。我认为MinGW使用了系统dll,但它显然不起作用。我看过一篇关于如何使用Visual Studio创建独立exe的文章,但由于它的简单性,我更喜欢使用MinGW。
所以我的问题:如何使用MinGW生成一个独立的exe文件?
注意:我只使用标准库,但很高兴知道如何在未来的项目中包含其他库。
如果你想要一个独立exe的例子,putty就是一个很好的例子(它是Windows的ssh客户端)。
答案 0 :(得分:1)
您需要的两个库很可能是libgcc_s_sjlj-1.dll
和libstdc++-6.dll
或其中的一些变体,具体取决于构建时mingw的配置方式。这些是C和C ++标准库实现。
如果需要,可以在链接最终可执行文件-static-libgcc
和-static-libstdc++
时将额外的标志传递给编译器,这将导致它静态链接这些库而不是要求您使用您的可执行文件为它们分发DLL。
此处有更多信息:Mingw libgcc_s_sjlj-1.dll is missing
通常,您始终可以尝试将库静态链接到可执行文件中。这些特殊的-static-libgcc
标志是仅由mingw提供的特殊标志,而不是其他编译器提供的,而不是其他库,您对其他库使用不同的-static
语法。静态链接很好,但随着依赖性变得更加复杂,它会变得更加复杂和容易出错。静态链接存在与库链接顺序相关的一些缺陷。在某一点之后,通常更简单地使它们全部共享并且不进行任何静态链接。这取决于你,这取决于你的项目有多复杂/如果你开始遇到问题。