【发布时间】: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