【问题标题】:How to avoid msvcr100.dll dependency when manipulating files?操作文件时如何避免msvcr100.dll依赖?
【发布时间】:2014-12-11 08:14:53
【问题描述】:

我正在用 C 语言编写一个自定义安装程序启动器,它可以打开、读取和写入文件。我使用fopen() 打开文件。这在 Linux 上完美运行,并且二进制文件不依赖于 libstdc++.so,但在 Visual Studio 2010 中的 Windows 上,我依赖于 MSVCR100.DLL。如果我添加 /NODEFAULTLIB 标志,链接器将失败。

我需要这个程序没有 MSVCR100.DLL 依赖,因为它会启动一个安装程序,该安装程序会在稍后阶段安装 VC++ 2010 Redistributable,并且在启动时它不确定主机是否有这个库。

在没有MSVCR100.DLL的情况下如何在VS中操作文件?

【问题讨论】:

  • 虽然您在 Linux 中的程序不依赖于 libstdc++,但这是因为您使用 C 编程,而 libstdc++ 用于 C++。但是,您的程序 do 依赖于 libc (glibc),它默认安装在几乎所有 Linux 发行版上。至于你的 Windows 版本,它也需要运行时支持,Linux 上的所有标准 C 函数都在 libc 中,在 Windows 上它们在 MSVCR100 库中。要解决该问题,您不应动态链接到运行时库,而应静态链接。你的程序会大很多,但它不需要外部运行时库。

标签: c visual-studio-2010


【解决方案1】:

您获得了对 msvcr100.dll(可能还有 msvcp100.dll)的依赖,因为您的项目设置定义了这一点。您应该使用静态链接而不是运行时库的动态链接。

更改您的C/C++ code generation settings:运行时库。选择不带 DLL 的选项。

【讨论】:

    【解决方案2】:

    或者,如果您可以稍微更改您的代码,您可以使用 Win32 API(CreateFile、ReadFile...)。这将链接到始终可用的 kernel32.dll。

    【讨论】:

      猜你喜欢
      • 2014-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-06
      • 2018-09-03
      • 1970-01-01
      • 2011-06-16
      相关资源
      最近更新 更多