2010-10-15 275 views
6

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

我试过-static标志到gcc,它没有做任何改变。

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

+0

关于你的最后一个问题......如果你在谈论STL,它只是标题。 – 2010-10-15 14:59:46

+0

@Armen:但还没有C++ MSVCPT的DLL或类似的东西? – zaharpopov 2010-10-15 15:12:22

+0

请注意,MSVCRT.DLL作为系统组件包含在几乎每个Windows版本中,而您通常可能会遇到这种情况。特别是,您不需要将它与您的应用程序一起分发,因为您的最终用户已经拥有了它。那么一个自然的问题是,为什么你需要避免与其动态链接呢? – RBerteig 2010-10-15 18:31:16

回答

7

我相信MinGW由于版权原因不使用静态运行时库。

你也许可以尝试使用newlib(http://sourceware.org/newlib/),以创建一个不链接到msvcrt.dll

+1

+1版权回避。这是它已经在每个Windows系统上的一个聪明的副作用。使用MinGW构建的程序需要它,但不必分发它。因此,没有版权问题。 – RBerteig 2010-10-15 18:33:20

+1

即使我没有在代码中使用任何std C函数,它需要MSVCRT我认为对于在main之前/之后运行的CRT启动/清除代码。 newlib也提供这个功能吗? – zaharpopov 2010-10-16 06:48:33

-2

链接与gcc -static -static-libgcc -static-libstdc++的可执行文件,你会不会需要libgcc_s_dw2-1.dlllibstdc++-6.dll

+0

Downvoting这样的答案没有解释是不是真的有帮助。没有明显的原因,为什么这个答案是错误的。 – JBentley 2014-03-27 21:42:10

+1

如何处理导致这不会从生成的二进制文件相关性中删除msvcrt.dll? – paulm 2014-04-18 00:44:11

+0

,因为它仍然需要msvcrt.dll – sherpya 2016-03-02 00:24:36

0

已经花了,而搜索对于我自己,我碰到this post介绍正在进行Mingw32备用C运行时间库。但是,它尚未准备好使用,开发人员似乎已经放弃了它。 Home page link here

在这里发布这个答案,希望它对未来某些时候用户搜索引擎有用。

相关问题