【问题标题】:C++ - How to make a program compiled with MinGW standalone?C ++ - 如何使使用 MinGW 独立编译的程序?
【发布时间】:2016-02-27 17:30:59
【问题描述】:

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

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

注意:我只使用标准库,但很高兴知道如何为未来的项目包含其他库。

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

【问题讨论】:

    标签: c++ compilation mingw standard-library


    【解决方案1】:

    您需要的两个库很可能是 libgcc_s_sjlj-1.dlllibstdc++-6.dll 或其中的一些变体,具体取决于您的 mingw 在构建时的配置方式。这些是 C 和 C++ 标准库实现。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-26
      • 1970-01-01
      • 2019-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-23
      相关资源
      最近更新 更多