mingw和msvcrt.dll混淆

时间:2015-02-28 14:57:56

标签: c++ c windows mingw msvcrt

我在MinGW中编写WinAPI

我还没有完全理解的一件事是VC可再发行, 我收到了一大堆问题

有人说这些程序需要msvcrt.dll

  1. 是bot c ++和c编译所需的库吗?
  2. 是否适用于所有客户目标?
  3. 我必须重新发布吗?我可以重新分配它吗?
  4. 我可以轻松摆脱这种外部依赖吗?
  5. 是否有其他编译器可以让我不承担这种令人不快的外部依赖? (我依旧记得听到它有问题 - 它可能不是核心系统库,我听说,或者它不能自由使用并重新分发库)
  6. 我在这里看到了一些错误,因为我想产生没有依赖性的小exes只调用系统WinAPI并且如果我使用 有些像C标准库函数函数我更喜欢经济和静态编译,而不是任何第三方依赖

2 个答案:

答案 0 :(得分:3)

  1. MSVCRT.DLL主要包含C运行时,MinGW只能使用C部分。 C ++二进制代码通常不能在编译器之间使用。
  2. 这取决于你的“目标”。它可以从Windows 2000获得。
  3. 否。不是。它是Microsoft专有代码,每个Windows版本的版本都略有不同。
  4. 否。我不知道一个成熟的替代C运行时DLL。
  5. 您无需担心依赖性,因为它随处可用。 (请注意,这不是一个非常好的运行时间,尤其是关于多字节字符。)
  6. Microsoft编译器可以链接“静态”库,以便生成的可执行文件仅依赖于像kernel32.dll,user32.dll等系统DLL .MinGW不能这样做(还)。

    编辑:MSVCRT.DLL问题的简明描述是here

答案 1 :(得分:1)

根据MS白皮书的说法:

http://www.microsoft.com/en-gb/download/details.aspx?id=13350

您可以重新分发Visual Studio组件的某些部分。

  

某些软件,例如Microsoft .NET Framework,可以   分散式。 MSDN中包含的软件产品组件   可以分发的订阅(在应用程序或   作为单独的文件)没有版税在REDIST.TXT中确定   与产品关联的文件。可以分发的组件   在OTHER-DIST.TXT文件中标识非Microsoft平台   与产品相关联。代码被识别为可分发的   扩展名.lib不能直接分发;必须联系起来   进入应用程序。但是,结果输出可以是   分布。

     

你也可以:

     
      
  • 修改和分发标记为“sample”或“Code Snippet”的代码的源代码和对象。
  •   
  • 分发Microsoft Merge Modules的未修改输出,以便与应用程序的.msi文件一起使用。
  •   
  • 分发包含核心数据访问组件的MDAC_TYP.EXE文件(例如Microsoft SQL Server OLE DB提供程序和ODBC   驱动程序)。
  •   
  • 分发C ++库的对象版本(Microsoft基础类,活动模板库和C运行时)。
  •   

MS还专门为开发人员生成可再发行的软件包:http://www.microsoft.com/en-gb/download/details.aspx?id=40784

所以,回答你的问题:

  1. 是。虽然它是“纯C”,但它包含C语言的C ++部分使用的基本函数,例如文件I / O,时间和日期函数,数学函数等。
  2. 在合理范围内。见上面的链接。
  3. 不,是的。如上所述:您可以选择只向客户说“您需要下载安装此软件包”,但许可证应允许您免费将其分发到您的产品中。
  4. 取决于您所谓的“轻松”以及您的代码使用的库的确切部分。有些功能可能很容易替换,有些则不是这样 - 但从“是的,只是去做http://www.example.com/msvcrt.dll-plugin-replacement”的意义上讲它并不容易 - 它需要提供一些替代代码。 MinGW没有附带自己的C库的原因是,为这里你需要的所有windows功能写一个替代品并不是完全无足轻重的......
  5. 见上文 - 如果这很容易,有人会这样做。可能有一些编译器带有他们自己的库,但它可能不是免费的并且可以免费分发一个(我不知道任何产品不依赖于MSVCRT.DLL - 但是一个人存在并非不可能)