Microsoft KB Archive/166504

= You receive an "error LNK2001: unresolved external symbol ___argc" error message when the MFC library and the CRT library do not match in debug/release or in static/dynamic in Visual C++ =

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++ 2.1

 Microsoft Visual C++ 2.2

 Microsoft Visual C++ 4.0 Standard Edition</li></ul>

 Microsoft Visual C++ 4.1 Subscription</li></ul>

 Microsoft Visual C++ 4.2 Enterprise Edition</li></ul>

 Microsoft Visual C++ 4.2 Professional Edition</li></ul>

 Microsoft Visual C++ 5.0 Enterprise Edition</li></ul>

 Microsoft Visual C++ 5.0 Professional Edition</li></ul>

 Microsoft Visual C++ 6.0 Enterprise Edition</li></ul>

 Microsoft Visual C++ 6.0 Professional Edition</li></ul>

 Microsoft Visual C++ 6.0 Standard Edition</li></ul> </li></ul>

-

<div class="notice_section">

This article was previously published under Q166504

<div class="symptoms_section">

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.

<div class="cause_section">

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.

<div class="resolution_section">

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."

<div class="status_section">

STATUS
This behavior is by design.

<div class="references_section">