当使用 Visual c + + 生成程序将使用链接默认 C 和 c + + 库的说明

文章编号: 154753 - 查看本文应用于的产品
展开全部 | 关闭全部

本页

概要

本文介绍了默认库 LIBC [D].lib、 LIBCMT [D].lib、 LIBCI [D].lib、 LIBCIMT [D].lib、 LIBCP [D].lib、 LIBCPMT [D].lib、 MSVCRT [D].lib、 MSVCIRT [D].lib 和程序将使用链接,当使用 Visual c + + 生成 MSVCPRT [D].lib。

更多信息

当生成发布 (或调试) 版本的项目在 Visual c + +,一个基本的 C 运行时库 (LIBC [D].lib、 LIBCMT [D].lib 和 MSVCRT[D].LIB) 是默认情况下链接,取决于您选择编译器选项 (单线程 <ML[d]>、 多线程的 <MT[d]> 或多线程的 DLL <MD[d]>)。此外可能会从标准 c + + 库的库或一个从旧 iostream 库链接取决于在代码中使用邮件头。例如对于请考虑以下情况:

例 1: 示例程序 test1.cpp

// test1.cpp
void main()
{
}
				
  • 如果您生成 test1.cpp 使用 /ML (或 / MLd,用于调试生成) 编译器选项您的程序将使用链接 LIBC.LIB (或 LIBCD.LIB 的调试版本) 中,除了其他库。
    注意/ML/ MLd 在 Visual c + + 2005年和更高版本的 Visual c + + 中,已删除的静态单线程库的库编译器选项。
  • 如果使用 /MT/MT test1.cpp 生成 (或 / MTd 的调试版本) 编译器选项您的程序将使用链接 LIBCMT.LIB (或 LIBCMTD.LIB 的调试版本) 中,除了其他库。
  • 如果您生成 test1.cpp 使用 /MD/MD (或 / MDd 的调试版本) 编译器选项您的程序将使用链接 MSVCRT.LIB (或 MSVCRTD.LIB 的调试版本) 中,除了其他库。 在这种情况下您的程序将取决于 MSVCRT.DLL (或 MSVCRTD.DLL 的调试版本)。

例二: 示例程序 test2.cpp

   // test2.cpp
   #include <iostream>
   void main()
   {
   }
				
  • 如果您生成 test2.cpp 使用 /ML (或 / MLd 的调试版本) 编译器选项将会链接您的程序与 LIBC.LIB (或 LIBCD.LIB 的调试版本) 和 LIBCP.LIB (或 LIBCPD.LIB 的调试版本),除了其他库。
    注意/ML/ MLd 在 Visual c + + 2005年和更高版本的 Visual c + + 中,已删除的静态单线程库的库编译器选项。
  • 如果使用 /MT/MT test2.cpp 生成 (或 / MTd 的调试版本) 编译器选项将会链接您的程序与 LIBCMT.LIB (或 LIBCMTD.LIB 的调试版本) 和 LIBCPMT.LIB (或 LIBCPMTD.LIB 的调试版本),除了其他库。
  • 如果您生成 test2.cpp 使用该 /MD(or /MDd, for a debug build) 编译器选项中,您的程序将链接与 MSVCRT.LIB (或 MSVCRTD.LIB 的调试版本) 和 MSVCPRT.LIB (或 MSVCPRTD.LIB 的调试版本),除了其他库。
    Microsoft Visual c + + 2008 年程序将取决于 MSVCR90.DLL 和 MSVCP90.DLL (或 MSVCR90D.DLL 和 MSVCP90D.DLL 的调试版本)。
    Microsoft Visual c + + 2005 年程序将取决于 MSVCR80.DLL 和 MSVCP80.DLL (或 MSVCR80D.DLL 和 MSVCP80D.DLL 的调试版本)。
    Microsoft 可 Visual c + + 的 2003年为您的程序将取决于 MSVCR71.DLL 和 MSVCP71.DLL (或 MSVCR71D.DLL 和 MSVCP71D.DLL 的调试版本)。
    Microsoft 可 Visual c + + 的 2002年为您的程序将取决于 MSVCR70.DLL 和 MSVCP70.DLL (或 MSVCR70D.DLL 和 MSVCP70D.DLL 的调试版本)。
    对于 Microsoft Visual c + + 6.0 中,您的程序将依赖于 MSVCRT.DLL 和 MSVCP60.DLL (或 MSVCRTD.DLL 和 MSVCP60D.DLL 的调试版本)。
    对于 Microsoft Visual c + + 5.0,您的程序将依赖于 MSVCRT.DLL 和 MSVCP50.DLL (或 MSVCRTD.DLL 和 MSVCP50D.DLL 的调试版本)。
    对于 Microsoft Visual c + + 4.2,您的程序将依赖于 MSVCRT.DLL (或调试版本的 MSVCRTD.DLL) 和 MSVCPRT.LIB (或 MSVCPRTD.LIB 的调试版本)。

情况 3: 示例程序 test3.cpp

注意.h 扩展名的流头文件 (包括 <useoldio.h>) 在 Visual c + + 2002年中已被否决,并在 Visual c + + 2005年和 Visual c + + 2003年中已被删除。因此,下面的示例在晚于 Visual c + + 2002年版本的 Visual c + + 中不起作用。
// test3.cpp
#include <iostream.h>
void main()
{
}
				
  • 如果您生成 test3.cpp 使用 /ML (或 / MLd 的调试版本) 编译器选项将会链接您的程序与 LIBC.LIB (或 LIBCD.LIB 的调试版本) 和 LIBCI.LIB (或 LIBCID.LIB 的调试版本),除了其他库。
    注意/ML/ MLd 在 Visual c + + 2005年和更高版本的 Visual c + + 中,已删除的静态单线程库的库编译器选项。
  • 如果使用 /MT/MT test3.cpp 生成 (或 / MTd 的调试版本) 编译器选项将会链接您的程序与 LIBCMT.LIB (或 LIBCMTD.LIB 的调试版本) 和 LIBCIMT.LIB (或 LIBCIMTD.LIB 的调试版本),除了其他库。
  • 如果您生成 test3.cpp 使用 /MD/MD (或 / MDd 的调试版本) 编译器选项将会链接您的程序与 MSVCRT.LIB (或 MSVCRTD.LIB 的调试版本) 和 MSVCIRT.LIB (或 MSVCIRTD.LIB 的调试版本) 中,除了其他库。在这种情况下您的程序将取决于 MSVCRT.DLL (或调试版本的 MSVCRTD.DLL) 和 MSVCIRT.DLL (或 MSVCIRTD.DLL 的调试版本)。
标头确定是否将链接标准 c + + 库、 旧 iostream 库,或两者都不。编译器选项 (/ML [d]/MT/MT [d]/MD/MD [d]) 确定哪个版本的库单线程、 多线程,或多线程的 DLL 是默认情况下链接。

注意它可能看上去没有.h 扩展名的标头是标准 c + + 标头和扩展名为.h 标头是 C 运行时的页眉或旧 iostream 标头。这不是,则返回 true。以下文件所述 <useoldio.h> 和 <use_ansi.h> 确定您的应用程序将使用链接的库。

实际,有两个的头文件 <useoldio.h> 和 <use_ansi.h>,包含 #pragmas。在 #pragmas 强制旧 iostream 库或标准 c + + 库默认情况下,在链接。

头文件 <useoldio.h> 包含强制旧 iostream 库中被链接到的 # pragma 语句。所有旧 iostream 标头包括 <useoldio.h>。因此,如果在您的应用程序中包括任何旧的 iostream 标头,旧 iostream 库将链接默认情况下。下表列出了包括 <useoldio.h> 的所有头文件。

旧 iostream 标头

收起该表格展开该表格
FSTREAM.HIOMANIP.H
IOS.HIOSTREAM.H
ISTREAM.HOSTREAM.H
STDIOSTR.HSTREAMB.H
STRSTREA.H
注意<useoldio.h> 仅适用于 Visual c + +.net 2003年和早期版本。因为从 Visual c + + 2003年及更高版本中移除了旧 iostream 库,<useoldio.h> 标头也将被删除。
头文件 <use_ansi.h> 包含强制执行标准的 c + + 库,链接中的 # pragma 语句。所有标准 c + + 头包括 <use_ansi.h>。因此如果在您的应用程序中包括任何标准 c + + 头,标准 c + + 库将链接默认情况下。下表列出了包括 <use_ansi.h> 的所有头文件。

标准 c + + 头

收起该表格展开该表格
算法BITSET复杂DEQUE
FSTREAM功能IOMANIPIOS
IOSFWDIOSTREAMISTREAM迭代器
限制列表区域设置映射
内存数字OSTREAM队列
设置SSTREAM堆栈STDEXCEPT
STREAMBUF字符串STRSTREAMTYPEINFO
实用程序VALARRAY矢量XIOSBASE
XLOCALEXLOCINFOXLOCMONXLOCNUM
XLOCTIMEXMEMORYXSTRINGXTREE
XUTILITYYMATH.H
您不能混合使用对旧 iostream 库和 Visual c + + 4.2 中新的标准 c + + 库的调用。
收起该表格展开该表格
编译选项用链接库
/ML (2003年及更早的版本为 VC + +.net)LIBC.LIB LIBCP.LIB
/ MLd (2003 及更早的版本为 VC + +.net)LIBCD.LIB LIBCPD.LIB
/mtLIBCMT.LIB LIBCPMT.LIB
/ MTdLIBCMTD.LIB LIBCPMTD.LIB
/mdMSVCRT.LIB MSVCPRT.LIB
/ MDdMSVCRTD.LIB MSVCPRTD.LIB

使用 CRT dll 的的摘要表

收起该表格展开该表格
与导入库链接dll 使用 (Visual c + + 5.0|6.0)dll 使用 (Visual c + +.net 2002|Visual c + +.net 2003年)使用的 dll (Visual c + + 2005|Visual c + + 2008年
MSVCRT.LIBMSVCRT.DLLMSVCR7 0|1.dllMSVCR 80|90.dll
MSVCRTD.LIBMSVCRTD.DLLMSVCR7 0|1 D.DLLMSVCR 80|90 D.DLL
MSVCPRT.LIBMSVCP (5|6) 0.DLLMSVCP7 0|1.dllMSVCP 80|90.dll
MSVCPRTD.LIBMSVCP (5|6) 0D.DLLMSVCP7 0|1 D.DLLMSVCP 80|90 D.DLL
MSVCIRT.LIBMSVCIRT.DLL
MSVCIRTD.LIBMSVCIRTD.DLL

参考

C 运行时库
http://msdn.microsoft.com/en-us/library/abx4dbyh.aspx有关更多的信息请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
154419标准 c + + 库常见问题解答

属性

文章编号: 154753 - 最后修改: 2008年3月19日 - 修订: 7.1
这篇文章中的信息适用于:
  • Microsoft Visual C++ 2008 Express Edition
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C++ .NET 2002 标准版
  • Microsoft Visual C++ 5.0 专业版
  • Microsoft Visual C++ 5.0 企业版
  • Microsoft Visual C++ 4.2 专业版
  • Microsoft Visual C++ 4.2 企业版
关键字:?
kbmt kbarttypeinf kbcompiler kbinfo kblangcpp KB154753 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 154753
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈