Article ID: 166504
Article Last Modified on 11/21/2006
APPLIES TO
- Microsoft Foundation Class Library 4.2, when used with:
- Microsoft Visual C++ 2.0 Professional Edition
- Microsoft Visual C++ 4.0 Standard Edition
- Microsoft Visual C++ 4.1 Subscription
- Microsoft Visual C++ 4.2 Enterprise Edition
- Microsoft Visual C++ 4.2 Professional Edition
- Microsoft Visual C++ 5.0 Enterprise Edition
- Microsoft Visual C++ 5.0 Professional Edition
- Microsoft Visual C++ 6.0 Enterprise Edition
- Microsoft Visual C++ 6.0 Professional Edition
- Microsoft Visual C++ 6.0 Standard Edition
This article was previously published under Q166504
SYMPTOMS
When the MFC and CRT (C Run-Time) libraries do not match in
debug/release or in static/dynamic, you get errors such as the following when
linking:
nafxcwd.lib(appcore.obj) : error LNK2001:
unresolved external symbol ___argc
Many other strange problems may
erupt during build or runtime: memory corruption, memory leaks, complaints from
the debug C Run-Time libraries during run-time, and more.
CAUSE
When building an MFC application or DLL, you need to insure
that all relevant libraries are in sync:
- If you have selected to build an application using MFC in
the Shared Library, then you must also use the dynamic version of the C
Run-Time (MSVCRT.DLL).
- If you have selected to build a debug MFC application, then
you must also use the debug version of the C Run-Time. Similarly, release MFC
applications must use the non-debug version of the C Run-Time.
- If your debug MFC application uses extension DLLs, every
extension DLL must be a debug build as well. Again, release apps must match
release extension DLLs. The type of C Run-Time library is fixed. Extension DLLs
and the applications which use them must all use MFC in the shared library,
which requires the dynamic DLL version of the C Run-Time.
- If you are linking to any static libraries that also link
to MFC or the CRT, you should ensure that every static library shares the same
properties (debug/release, CRT-static/dynamic) as the application.
RESOLUTION
To change the type of C Run-Time library used by an
application or DLL, go to the Build/Project settings property sheet and switch
to the C/C++ tab. On the C/C++ page, choose the "Code Generation" category.
Change the value of the "Use run-time library" listbox. Pay careful attention
to make this specific for each configuration; only one configuration, such as
"Win32 (80x86) Debug," should be selected when you change this value.
Debug, shared library MFC applications - "Debug Multithreaded Dll."
Release, shared library MFC applications - "Multithread Dll."
Debug, static library MFC applications - "Debug Multithreaded."
Release, static library MFC applications - "Multithreaded."
STATUS
This behavior is by design.
REFERENCES
For more information about CRT options and MFC, click the following article numbers to view the articles in the Microsoft Knowledge Base:
126646
PRB: Error Msg: LNK2001 on
__beginthreadex and __endthreadex
Keywords: kbtshoot kberrmsg kbcrt kbprb KB166504