我是用户。我的问题是关于"C/C++运行时库“。
我创建了一个包含".cpp“源文件"main.cpp”的“空项目”,其中包含以下代码:
#include <iostream>
int main(void)
{
std::cout << "Hello World" << std::endl;
return 0;
}"iostream是一个头文件,用于C++编程语言中的输入/输出。它是C++标准库的一部分。“
发布于 2013-02-07 13:33:33
术语"C/C++运行时库“并不意味着什么,它大致是IDE中项目设置的名称。项目+属性,C/C++,代码生成,运行时库设置。在这里,您可以在/MD和/MT之间进行选择。
使用默认设置/MD,程序将使用运行时库的DLL版本。在您的计算机上,Visual安装程序将它们复制到c:\windows\system32 32和/或c:\windows\syswow64 64中。在VS安装目录的vc/redist子目录中有它们的副本,供您在为程序创建安装程序时使用。它们的三个版本,32位英特尔处理器的x86,64位英特尔处理器的x64和arm处理器的ARM。根据您在项目中选择的平台选择正确的平台。
相关的DLL名称是:
在您的计算机上,您还得到了这些DLL的调试版本,这些DLL由VS安装程序复制到Windows目录。他们的名字和后面的字母"d“相同。只对调试代码有用,不能重新分发它们。相应的运行时库设置是/MDd。
大多数C++项目只需要msvcr110.dll和msvcp110.dll,您可以知道何时选择使用其他库,因为它们有特定的项目模板和设置。
在用户的计算机上安装所有这些all的一个简单方法是使用预构建的安装程序。您可以下载它从这里开始 (注意:仅从今天开始,这可能会在服务包或更新可用时发生变化)。或者您可以简单地将它们复制到与主EXE相同的目录中。
通过将运行时库设置更改为/MT,可以避免对这些DLL产生依赖。在这种情况下,运行时支持代码将链接到您的程序中,您将只能部署一个EXE。当然,当您这样做时,它会变得更大,有时会显着地变大,特别是当您使用MFC时。
如果创建DLL以及EXE,则使用/MT是有风险的。最后,您将在您的程序中获得多个CRT副本。对于VS的早期版本来说,这尤其是一个问题,因为每个CRT都有自己的堆,而不是VS2012。但是,当您有多个"errno“变量时,运行时问题仍然很严重。强烈建议使用/MD来避免这种损失。
您的程序将在Windows 7和8上运行。对XP的支持正在减弱,您将需要VS Update 1并将项目中的工具集设置从"v110“更改为"v110_xp”,以创建仍然运行在XP上的程序。当您这样做时,会丢失一些功能,与区域设置和线程本地存储相关联,需要进行测试。
发布于 2013-02-07 11:59:04
这没什么..。如果你发现一个错误,请插进去。
1. "C/C++运行时库“与"C/C++标准库”是否有区别?
是也不是。有时,人们使用运行时库来表示一切,而忽略标准库(对于Microsoft )。但是,从技术上讲,运行库是在运行时加载的,因此它包括对.lib (导入库)和.dll。详见此处:http://msdn.microsoft.com/en-us/library/vstudio/abx4dbyh(v=vs.100).aspx
从技术上讲,libc*是标准库,*crt是运行时库。
2.如何知道"C/C++运行时库“库是静态链接还是动态链接到项目?
如果您使用的是IDE (VS2010,其他类似的),这是在项目属性中:
- configuration properties
- c/c++
- code generation
[Runtime Library]3.我如何知道这个库在文件系统中的位置?
库文件位于sdk的lib dir (如果安装了较后的windows )或Visual目录中。
4.在"C/C++运行时库“被动态链接到项目的情况下,我如何知道所使用的".dll”以及所使用的".dll“位于文件系统中的位置?
您可以通过使用“依赖”工具找出使用的是哪些。http://www.dependencywalker.com/
DLL位于Windows目录中的某个位置。他们移动他们,现在它是在时髦的地方与清单和东西,以保持跟踪版本。我不会太担心这个的。如果你要担心这件事,可能是出了问题。详细信息:http://msdn.microsoft.com/en-us/library/windows/desktop/aa375365(v=vs.85).aspx 组件
如果这是一个问题,您可以将一个可再发行的包与安装程序捆绑在一起:Visual可再发行与Visual SP1的区别
5.假设我静态地将"C/C++运行时库“链接到该项目,我是否可以确保从源代码生成的可执行文件将在所有Windows平台(XP/Vista/7/.,32位/64位)上运行?
是的,如果您静态链接,那么您就更安全了,因为您无法找到dll。但是,这会使您的可执行文件更大。在行为上还有其他的后果。很难枚举,但区别在于库位于编译到exe中的dll中。
6.动态链接"C/C++运行时库“到项目的优缺点是什么?
为什么使用dll:
A号的。较小的exe大小,因为所有库内容都在dll中,这些dll应该已经安装在用户的系统上,尽管有时不是这样。
如果运行时有错误,微软可以把新的版本推给用户。你没必要去处理它。如果静态链接,则必须将新的exe推送给用户。
为什么不使用dll:
处理dll的许多问题。如果你忘了把redist捆绑在一起,很多问题就会出现。
有更多的dll来加载和卸载会导致启动和退出时间更慢。
可能还有其他我没有想到的原因..。
7. "C/C++运行时库“应该静态地还是动态地链接到项目?
真的要看情况了。我个人更喜欢静态链接。我讨厌到处寻找合适的redist/dll/等等。
https://stackoverflow.com/questions/14749662
复制相似问题