• | 如果生成 test1.cpp 使用 / MD (或 ) 编译器选项, 程序将链接到其他库中除与 MSVCRT.LIB (或 MSVCRTD.LIB, 有关调试版本), MDd , 为调试生成 /。 在这种情况下, 程序将是依赖 MSVCRT.DLL (或 MSVCRTD.DLL 有关调试版本)。 例二: 示例程序 test2.cpp // test2.cpp #include <iostream> void main() { }
• | 如果生成使用 / ML test2.cpp LIBCP.LIB (或 LIBCPD.LIB, 有关调试版本), 和其他库或 ) 编译器选项, 将程序链接与 LIBC.LIB (或 LIBCD.LIB, 有关调试版本) MLd , 为调试生成 (/。 | • | 如果生成使用 / MT test2.cpp LIBCPMT.LIB (或 LIBCPMTD.LIB, 有关调试版本), 和其他库或 ) 编译器选项, 将程序链接与 LIBCMT.LIB (或 LIBCMTD.LIB, 有关调试版本) MTd , 为调试生成 (/。 | • | 如果生成使用 test2.cpp MSVCPRT.LIB (或 MSVCPRTD.LIB, 有关调试版本), 和其他库 (or /MDd, for a debug build) 编译器选项, / MD 与 MSVCRT.LIB (或 MSVCRTD.LIB, 有关调试版本) 将程序链接。 对于 Microsoft Visual C++ 2005, 程序将会依赖 MSVCRT.DLL 和 MSVCP80.DLL (或 MSVCRTD.DLL 和 MSVCP80D.DLL 有关调试版本)。 对于 Microsoft Visual C++ 2003, 程序将会依赖 MSVCRT.DLL 和 MSVCP71.DLL (或 MSVCRTD.DLL 和 MSVCP71D.DLL 有关调试版本)。 对于 Microsoft Visual C++ 2002, 程序将会依赖 MSVCRT.DLL 和 MSVCP70.DLL (或 MSVCRTD.DLL 和 MSVCP70D.DLL 有关调试版本)。 对于 MicrosoftVisualC++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, 有关调试版本)。 | 示例程序 test3.cpp 情况 3: 具有 h 扩展名 注意 : 流头文件有 Visual C++ 2002年抨击并在 VisualC++2005 和 Visual C++ 2003 中删除了 (包括 < useoldio.h >)。 因此, 以下示例在晚于 Visual C++ 2002 版本的 VisualC++ 中无法工作。 // test3.cpp #include <iostream.h> void main() { }
• | 如果生成使用 / ML test3.cpp LIBCI.LIB (或 LIBCID.LIB, 有关调试版本), 和其他库或 ) 编译器选项, 将程序链接与 LIBC.LIB (或 LIBCD.LIB, 有关调试版本) MLd , 为调试生成 (/。 | • | 如果生成使用 / MT test3.cpp LIBCIMT.LIB (或 LIBCIMTD.LIB, 有关调试版本), 和其他库或 ) 编译器选项, 将程序链接与 LIBCMT.LIB (或 LIBCMTD.LIB, 有关调试版本) MTd , 为调试生成 (/。 | • | 如果生成使用 / MD test3.cpp MSVCIRT.LIB (或 MSVCIRTD.LIB, 有关调试版本) 和其他库或 ) 编译器选项, 将程序链接与 MSVCRT.LIB (或 MSVCRTD.LIB, 有关调试版本) MDd , 为调试生成 (/。 这种情况下, 程序将会依赖 MSVCRT.DLL (或为调试生成 MSVCRTD.DLL) MSVCIRT.DLL (或 MSVCIRTD.DLL 有关调试版本)。 | 确定是否将链接标准 C++ 库、 旧 iostream 库, 或没有标题。 确定是否为默认链接多线程 DLL 版本的单线程、 多线程, 库或编译器选项 ( / ML [ d ] , [ d ] / MT , / MD [ d ] )。
注意 它似乎头没有 h 扩展名是常用 C++ 头并且页眉与 h 扩展名是 C 运行头或旧 iostream 头。 不是如此。 详见下面, < useoldio.h > 文件和 < use_ansi.h > 确定库应用程序将链接。
实际, 还有两头文件, 包含 #pragmas 和 <use_ansi.h>, <useoldio.h>。 #pragmas 强制或者旧 iostream 库或标准 C++ 库到中链接默认。
头文件 <useoldio.h> 包含 # pragma 语句, 强制被链接到旧 iostream 库。 所有旧 iostream 头包括 <useoldio.h>。 因此, 如果, 应用程序中包含任何旧 iostream 头旧 iostream 库将链接默认。 下表列出所有头文件包含 <useoldio.h>。 Old iostream Headers --------------------
FSTREAM.H IOMANIP.H IOS.H IOSTREAM.H ISTREAM.H OSTREAM.H STDIOSTR.H STREAMB.H STRSTREA.H 头文件 <use_ansi.h> 包含 # pragma 语句, 强制常用 C++ 库中被链接到。 所有常用 C++ 头包括 <use_ansi.h>。 因此如果, 应用程序中包含任何常用 C++ 头标准 C++ 库将链接默认。 下表列出所有头文件包含 <use_ansi.h>。 Standard C++ Headers ------------------------------------------------------
ALGORITHM BITSET COMPLEX DEQUE FSTREAM FUNCTIONAL IOMANIP IOS IOSFWD IOSTREAM ISTREAM ITERATOR LIMITS LIST LOCALE MAP MEMORY NUMERIC OSTREAM QUEUE SET SSTREAM STACK STDEXCEPT STREAMBUF STRING STRSTREAM TYPEINFO UTILITY VALARRAY VECTOR XIOSBASE XLOCALE XLOCINFO XLOCMON XLOCNUM XLOCTIME XMEMORY XSTRING XTREE XUTILITY YMATH.H 不能混合对旧 iostream 库和新标准 C++ 库 Visual C++ 4.2 中调用。 Summary Table
------------------------------------------------------------------ | Compile Old New IOStream Libraries | | Option IOStream or STL Linked With | |================================================================| | /ML No No LIBC.LIB | |----------------------------------------------------------------| | /MLd No No LIBCD.LIB | |----------------------------------------------------------------| | /MT No No LIBCMT.LIB | |----------------------------------------------------------------| | /MTd No No LIBCMTD.LIB | |----------------------------------------------------------------| | /MD No No MSVCRT.LIB | |----------------------------------------------------------------| | /MDd No No MSVCRTD.LIB | |----------------------------------------------------------------| | /ML No Yes LIBC.LIB, LIBCP.LIB | |----------------------------------------------------------------| | /MLd No Yes LIBCD.LIB, LIBCPD.LIB | |----------------------------------------------------------------| | /MT No Yes LIBCMT.LIB, LIBCPMT.LIB | |----------------------------------------------------------------| | /MTd No Yes LIBCMTD.LIB, LIBCPMTD.LIB | |----------------------------------------------------------------| | /MD No Yes MSVCRT.LIB, MSVCPRT.LIB | |----------------------------------------------------------------| | /MDd No Yes MSVCRTD.LIB, MSVCPRTD.LIB | |----------------------------------------------------------------| | /ML Yes No LIBC.LIB, LIBCI.LIB | |----------------------------------------------------------------| | /MLd Yes No LIBCD.LIB, LIBCID.LIB | |----------------------------------------------------------------| | /MT Yes No LIBCMT.LIB, LIBCIMT.LIB | |----------------------------------------------------------------| | /MTd Yes No LIBCMTD.LIB, LIBCIMTD.LIB | |----------------------------------------------------------------| | /MD Yes No MSVCRT.LIB, MSVCIRT.LIB | |----------------------------------------------------------------| | /MDd Yes No MSVCRTD.LIB, MSVCIRTD.LIB | ------------------------------------------------------------------
对于使用 CRT DLL 摘要表
与导入库链接 | 使用 DLL (VisualC++ 5.0|6.0) | DLL 使用 (Visual C++ 4.2) | DLL 使用 (VisualC++.NET 2002| Visual C++ .NET 2003) | MSVCRT.LIB | MSVCRT.DLL | MSVCRT.DLL | MSVCRT.DLL | MSVCRTD.LIB | MSVCRTD.DLL | MSVCRTD.DLL | MSVCRTD.DLL | MSVCPRT.LIB | (5|6) MSVCP 0.DLL |
| MSVCP7 (0 | 1 .DLL) | MSVCPRTD.LIB | (5|6) MSVCP 0D.DLL |
| MSVCP7 D.DLL (0 | 1) | MSVCIRT.LIB | MSVCIRT.DLL | MSVCIRT.DLL |
| MSVCIRTD.LIB | MSVCIRTD.DLL | MSVCIRTD.DLL
| |