【问题标题】:Can I link MSVCRT statically with mingw?我可以将 MSVCRT 与 mingw 静态链接吗?
【发布时间】:2011-04-25 23:56:49
【问题描述】:

我有在 Windows 上使用 mingw 编译的 C 程序。它工作正常,但需要MSVCRT.DLL。我想静态链接它(就像我可以在 Visual Studio 中做的那样)。这可能吗?

我尝试将-static 标记为gcc,但没有任何改变。

使用标准 C++ 库的 C++ 程序怎么样?

【问题讨论】:

  • 关于你的最后一个问题......如果你在谈论 STL,它只是标题。
  • @Armen:但不是还有 C++ MSVCPT 的 DLL 或类似的东西吗?
  • 请注意,MSVCRT.DLL 作为系统组件包含在您通常可能遇到的几乎每个版本的 Windows 中。特别是,您不需要将它与您的应用程序一起分发,因为您的最终用户已经拥有它。一个自然的问题是,为什么需要避免与其动态链接?
  • 另外,请记住,您可以使用 Dependency Walker 确认实际使用的 DLL。
  • 最新的mingw,使用gcc 4.5,有额外的库依赖,包括libgcc_s_dw2-1.dll和libstdc++-6.dll。我无法删除这些,因此我将它们与我的应用程序一起分发。

标签: c++ c dll mingw static-linking


【解决方案1】:

我认为 MinGW 出于版权原因不使用静态运行时库。

您也许可以尝试使用 newlib (http://sourceware.org/newlib/) 创建不链接到 msvcrt.dll 的可执行文件

【讨论】:

  • +1 用于避免版权。这是它已经存在于每个 Windows 系统上的一个巧妙的副作用。使用 MinGW 构建的程序需要它,但永远不必分发它。因此,没有版权问题。
  • 即使我在代码中不使用任何标准 C 函数,它也需要 MSVCRT 我认为对于在 main 之前/之后运行的 CRT 启动/清理代码。 newlib 也提供了?
  • MinGW64 怎么样?
【解决方案2】:

我自己花了一段时间搜索这个,发现this post 介绍了正在进行中的Mingw32 Alternate C Runtime Library。但是,它还没有准备好使用,开发人员似乎已经放弃了它。 Home page link here.

在此处发布此答案,希望它对将来某个时候使用谷歌搜索的人有用。

【讨论】:

    【解决方案3】:

    这并没有回答“如何避免与 MSVCRT.DLL 链接”的问题,但如果您在这里是为了更一般的问题“如何与 MinGW 链接”静态"...:

    gcc -static -static-libgcc -static-libstdc++ 链接,您将不需要libgcc_s_dw2-1.dlllibstdc++-6.dll

    【讨论】:

    • 在没有解释的情况下拒绝这样的答案并没有真正的帮助。这个答案没有明显的理由是错误的。
    • 如何导致这对从生成的二进制依赖项中删除 msvcrt.dll 没有影响?
    • 因为它仍然需要 msvcrt.dll
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    • 2012-08-27
    • 2017-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多