What are the C and C++ libraries my program would link with? (154753)
The information in this article applies to:
- Microsoft Visual C++ 2005 Express Edition
- Microsoft Visual C++ .NET (2003)
- Microsoft Visual C++ .NET (2002)
- Microsoft Visual C++, 32-bit Professional Edition 5.0
- Microsoft Visual C++, 32-bit Enterprise Edition 5.0
- Microsoft Visual C++, 32-bit Professional Edition 4.2
- Microsoft Visual C++, 32-bit Enterprise Edition 4.2
This article was previously published under Q154753 SUMMARY This article describes the default libraries LIBC[D].LIB,
LIBCMT[D].LIB, LIBCI[D].LIB, LIBCIMT[D].LIB, LIBCP[D].LIB, LIBCPMT[D].LIB,
MSVCRT[D].LIB, MSVCIRT[D].LIB, and MSVCPRT[D].LIB that a program will link with
when built using Visual C++. MORE INFORMATION When you build a release (or debug) version of your project
in Visual C++, one of the basic C Runtime libraries (LIBC[D].LIB,
LIBCMT[D].LIB, and MSVCRT[D].LIB) is linked by default, depending on the
compiler option you choose (single-threaded <ML[d]>, multithreaded
<MT[d]>, or multithreaded DLL<MD[d]>). A library from the Standard
C++ Library or one from the old iostream library may also be linked depending
on the headers you use in your code. For example, consider the following cases:
Case 1: Sample program test1.cpp
// test1.cpp
void main()
{
}
- If you build test1.cpp using the /ML (or /MLd, for a debug
build) compiler option, your program will link with LIBC.LIB (or LIBCD.LIB, for
debug build), in addition to other libraries.
- If you build test1.cpp using the /MT (or /MTd, for a debug build) compiler option, your program will link with
LIBCMT.LIB (or LIBCMTD.LIB, for debug build), in addition to other libraries.
- If you build test1.cpp using the /MD (or /MDd, for a debug build)compiler option, your program will link with
MSVCRT.LIB (or MSVCRTD.LIB, for debug build), in addition to other libraries.
In this case, your program will be dependent on MSVCRT.DLL (or MSVCRTD.DLL for
debug build).
Case 2: Sample program test2.cpp
// test2.cpp
#include <iostream>
void main()
{
}
- If you build test2.cpp using the /ML (or /MLd, for a debug build) compiler option, your program will link with
LIBC.LIB (or LIBCD.LIB, for debug build) and LIBCP.LIB (or LIBCPD.LIB, for
debug build), in addition to other libraries.
- If you build test2.cpp using the /MT (or /MTd, for a debug build) compiler option, your program will link with
LIBCMT.LIB (or LIBCMTD.LIB, for debug build) and LIBCPMT.LIB (or LIBCPMTD.LIB,
for debug build), in addition to other libraries.
- If you build test2.cpp using the /MD (or /MDd, for a debug
build) compiler option, your program will link with MSVCRT.LIB (or MSVCRTD.LIB,
for debug build) and MSVCPRT.LIB (or MSVCPRTD.LIB, for debug build), in
addition to other libraries.
For Microsoft Visual C++ 2005, your program will be dependent
on MSVCRT.DLL and MSVCP80.DLL (or MSVCRTD.DLL and MSVCP80D.DLL for debug
build). For Microsoft Visual C++ 2003, your program will be dependent
on MSVCRT.DLL and MSVCP71.DLL (or MSVCRTD.DLL and MSVCP71D.DLL for debug
build). For Microsoft Visual C++ 2002, your program will be dependent
on MSVCRT.DLL and MSVCP70.DLL (or MSVCRTD.DLL and MSVCP70D.DLL for debug
build). For Microsoft Visual C++ 6.0, your program will be dependent
on MSVCRT.DLL and MSVCP60.DLL (or MSVCRTD.DLL and MSVCP60D.DLL for debug
build). For Microsoft Visual C++ 5.0, your program will be dependent on MSVCRT.DLL and
MSVCP50.DLL (or MSVCRTD.DLL and MSVCP50D.DLL for debug build). For Microsoft Visual C++
4.2, your program will be dependent on MSVCRT.DLL (or MSVCRTD.DLL for debug
build) and MSVCPRT.LIB (or MSVCPRTD.LIB, for debug build).
Case 3: Sample program test3.cppNote The stream header files that have the .h extension (include <useoldio.h>) have been deprecated in Visual C++ 2002 and have been removed in Visual C++ 2005 and in Visual C++ 2003. Therefore, the following sample will not work in a version of Visual C++ later than Visual C++ 2002.
// test3.cpp
#include <iostream.h>
void main()
{
}
- If you build test3.cpp using the /ML (or /MLd, for a debug build) compiler option, your program will link with
LIBC.LIB (or LIBCD.LIB, for debug build) and LIBCI.LIB (or LIBCID.LIB, for
debug build), in addition to other libraries.
- If you build test3.cpp using the /MT (or /MTd, for a debug build) compiler option, your program will link with
LIBCMT.LIB (or LIBCMTD.LIB, for debug build) and LIBCIMT.LIB (or LIBCIMTD.LIB,
for debug build), in addition to other libraries.
- If you build test3.cpp using the /MD (or /MDd, for a debug build) compiler option, your program will link with
MSVCRT.LIB (or MSVCRTD.LIB, for debug build) and MSVCIRT.LIB (or MSVCIRTD.LIB,
for debug build) in addition to other libraries. In this case, your program
will be dependent on MSVCRT.DLL (or MSVCRTD.DLL for debug build) and
MSVCIRT.DLL (or MSVCIRTD.DLL for debug build).
Headers determine whether the Standard C++ libraries, old
iostream libraries, or neither will be linked. Compiler options ( /ML[d], /MT[d], /MD[d]) determine which version of the libraries single-threaded,
multithreaded, or multithreaded DLL is to be linked by default. Note It may seem that headers without the .h extension are Standard
C++ headers and that headers with the .h extension are C Runtime headers or
old iostream headers. This is not true. As explained below, the files
<useoldio.h> and <use_ansi.h> determine the libraries your
application will link with. Actually, there are two header files,
<useoldio.h> and <use_ansi.h>, that contain #pragmas. The #pragmas
force either the old iostream library or the Standard C++ library to be linked
in by default. The header file <useoldio.h> contains #pragma
statements, which force the old iostream library to be linked in. All old
iostream headers include <useoldio.h>. So, if you include any old
iostream header in your application, the old iostream library will be linked by
default. The following table lists all the header files that include
<useoldio.h>.
Old iostream Headers
--------------------
FSTREAM.H IOMANIP.H
IOS.H IOSTREAM.H
ISTREAM.H OSTREAM.H
STDIOSTR.H STREAMB.H
STRSTREA.H
The header file <use_ansi.h> contains #pragma statements
that force the Standard C++ Library to be linked in. All Standard C++ Headers
include <use_ansi.h>. So if you include any Standard C++ header in your
application, the Standard C++ library will be linked by default. The following
table lists all the header files that include <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
You cannot mix calls to the old iostream library and the new
Standard C++ Library in 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 |
------------------------------------------------------------------
Summary Table for CRT DLLs Used Import Library Linked With | DLLs Used (Visual C++ 5.0|6.0) | DLLs Used (Visual C++ 4.2) | DLLs Used (Visual C++ .NET 2002| Visual C++ .NET 2003) | MSVCRT.LIB | MSVCRT.DLL | MSVCRT.DLL | MSVCRT.DLL | MSVCRTD.LIB | MSVCRTD.DLL | MSVCRTD.DLL | MSVCRTD.DLL | MSVCPRT.LIB | MSVCP(5|6)0.DLL | | MSVCP7(0|1).DLL | MSVCPRTD.LIB | MSVCP(5|6)0D.DLL | | MSVCP7(0|1)D.DLL | MSVCIRT.LIB | MSVCIRT.DLL | MSVCIRT.DLL | | MSVCIRTD.LIB | MSVCIRTD.DLL | MSVCIRTD.DLL | |
Modification Type: | Major | Last Reviewed: | 1/9/2006 |
---|
Keywords: | kbArtTypeINF kbCompiler kbinfo kbLangCPP KB154753 kbAudDeveloper |
---|
|