Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在Visual Studio 2012中不使用MSVCRT运行时编译C_C++_C_Visual Studio_Visual Studio 2012_Msvcrt - Fatal编程技术网

C++ 在Visual Studio 2012中不使用MSVCRT运行时编译C

C++ 在Visual Studio 2012中不使用MSVCRT运行时编译C,c++,c,visual-studio,visual-studio-2012,msvcrt,C++,C,Visual Studio,Visual Studio 2012,Msvcrt,Visual Studio 2012(和早期版本)能够编译C代码普通c,不为C++。如果您想避免运行时的混乱,这将是一个很好的特性。我想到编译普通的C二进制文件,希望不用运行时来编译 在添加了/TC(编译为C)选项后,我希望得到一个只有基本依赖项的二进制文件,如kernel32和ntdll。但事实上,这是有联系的: 我们希望使用VS 2012,而不是运行时。GCC编译器不需要它,因此必须有一种方法在VS中编译“简单”二进制文件。我们不需要复杂的字符串函数或日期/时间库,只需要简单的代码 问题

Visual Studio 2012(和早期版本)能够编译C代码<强>普通c<强>,不为C++。如果您想避免运行时的混乱,这将是一个很好的特性。我想到编译普通的C二进制文件,希望不用运行时来编译

在添加了
/TC
(编译为C)选项后,我希望得到一个只有基本依赖项的二进制文件,如kernel32和ntdll。但事实上,这是有联系的:

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

<强>问题:<强>,是否可以在Visual Studio 2012中编译C代码而不使用MSVCRT运行时(或甚至C++代码)?< /P>


<没有编辑静态链接(<代码> /MT <代码> > < /P> > P>问题的正确答案:“在MVStudio20xx中编译C代码是否可能没有MSVCRT运行时(或甚至C++代码)?”是使用/MT选项(<代码>配置属性> C/C++ >代码生成>运行时库=多线程(/MT)< /代码>)。这将创建一个与任何MSVCRTxx没有依赖关系的可执行文件,这正是您想要的。据我所知,这就是它的全部功能。它对您想做的任何事情都没有限制——所有标准的C库函数(如memcpy)仍然可以工作。唯一的其他区别是.EXE文件稍大。多年来,我一直在使用MSVC6、MSVC2005、MSVC2008和MSVC2013制作和分发由纯ANSI C代码创建的EXE文件,没有任何问题


至于用限定词“无静态链接(/MT)”回答的问题,你不能。

我对VS/Windows不太熟悉,但是像
printf
strcmp
memcpy
这样的东西在哪里?我的印象是,MSVC运行时有点像
libc。所以
在linux上。为什么不
/MT
?我想它只链接了你实际使用的东西?因此,如果您不使用MSVCRT中的任何内容,它将不会链接任何内容。我不确定,但我认为
memcpy
也可以在另一个DLL中使用,在windows计算机上的分布方式更为广泛。为此,我将使用
MSVCRT.DLL
。可能吗?有一些关于如何实现运行时独立性的信息。不完全正确。从VS2005到VS2015,您可以编译一个没有运行时和静态链接的DLL。注意事项是,您对无文件行为持谨慎态度,避免非托管C++,并坚持纯非托管C.全局静态不初始化,您可能需要创建自己的微运行时,坚持USER32和KELNEL32 API调用。如果为使用不同运行时编译的产品制作DLL插件,则这一点尤为重要。可以创建仅依赖于kernel32.dll的C++/CLI.Net插件dll