3

Visual Studio 2012(及更早版本)能够编译 C 代码。纯 C,而不是 C++。如果您想避免运行时混乱,这将是一个很好的功能。我想编译普通的 C 二进制文件,并希望在没有MSVCRT运行时的情况下这样做。

添加/TC(编译为 C)选项后,我希望得到一个只有基本依赖项的二进制文件,例如 kernel32 和 ntdll。但相反,这是相关的:

在此处输入图像描述

我们想使用 VS 2012 而不是运行时。GCC 编译器不需要它,因此必须有一种方法可以在 VS 中编译“简单”二进制文件。我们不一定需要复杂的字符串函数或日期/时间库,只需要简单的代码。

问题:是否可以在没有 MSVCRT 运行时(甚至 C++ 代码)的情况下在 Visual Studio 2012 中编译 C 代码?

编辑:没有静态链接(/MT

4

1 回答 1

6

“是否可以在没有 MSVCRT 运行时(甚至 C++ 代码)的情况下在 Visual Studio 20xx 中编译 C 代码?”这个问题的正确答案?是使用 /MT 选项 ( Configuration Properties > C/C++ > Code Generation > Runtime Library=Multi-threaded (/MT))。这将完全按照您的需要创建一个不依赖于任何 MSVCRTxx 的可执行文件。据我所知,仅此而已。它对您想做的任何事情都没有任何限制——所有标准 C 库函数(如 memcpy)仍然有效。唯一的其他区别是 .EXE 文件稍大一些。多年来,我一直在制作和分发从纯 ANSI C 代码创建的 EXE 文件,使用 MSVC6、MSVC2005、MSVC2008 和 MSVC2013 没有任何问题。

至于带有限定词“没有静态链接(/ MT)”的问题的答案,你不能。

于 2016-05-31T22:55:38.613 回答