A LNK2005 error occurs when the CRT library and MFC libraries are linked in the wrong order in Visual C++ (148652)
The information in this article applies to:
- Microsoft Visual C++ 4.0
- Microsoft Visual C++ 4.1
- Microsoft Visual C++, 32-bit Enterprise Edition 5.0
- Microsoft Visual C++, 32-bit Enterprise Edition 6.0
- Microsoft Visual C++, 32-bit Professional Edition 5.0
- Microsoft Visual C++, 32-bit Professional Edition 6.0
- Microsoft Visual C++, 32-bit Learning Edition 6.0
- Microsoft Visual C++ .NET (2002)
- Microsoft Visual C++ .NET (2003)
This article was previously published under Q148652 SYMPTOMS When the C Run-Time (CRT) library and Microsoft Foundation
Class (MFC) libraries are linked in the wrong order, you may receive one of the
following LNK2005 errors: nafxcwd.lib(afxmem.obj) :
error LNK2005: "void * __cdecl operator new(unsigned int)"(??2@YAPAXI@Z)
already defined in LIBCMTD.lib(new.obj)
nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator
delete(void *)"(??3@YAXPAX@Z) already defined in LIBCMTD.lib(dbgnew.obj)
nafxcwd.lib(afxmem.obj) : error LNK2005:
"void * __cdecl operator new(unsigned int,int,char const *,int)"
(??2@YAPAXIHPBDH@Z) already defined in LIBCMTD.lib(dbgnew.obj)
mfcs40d.lib(dllmodul.obj): error LNK2005:
_DllMain@12 already defined in MSVCRTD.LIB (dllmain.obj)
mfcs42d.lib(dllmodul.obj): error LNK2005:
_DllMain@12 already defined in msvcrtd.lib(dllmain.obj)
CAUSE The CRT libraries use weak external linkage for the new, delete, and DllMain functions. The MFC libraries also contain new, delete, and DllMain functions. These functions require the MFC libraries to be linked
before the CRT library is linked.
RESOLUTION There are two ways to resolve this problem. The first
solution involves forcing the linker to link the libraries in the correct
order. The second solution allows you to find the module that is causing the
problem and to correct it. Note The following steps are based on Visual C++ 6.0. Solution One: Force Linker to Link Libraries in Correct Order- On the Project
menu, click Settings.
- In the Settings For view of the
Project Settings dialog box, click to select the project
configuration that is getting the link errors.
- On the Link tab, click to select Input
in the Category combo box.
- In the Ignore
libraries box, insert the library names (for
example, Nafxcwd.lib;Libcmtd.lib).
Note The linker command-line equivalent in /NOD:<library name>. - In the Object/library modules box,
insert the library names. You must make sure that these are listed in order and
as the first two libraries in the line (for example, Nafxcwd.lib
Libcmtd.lib).
To set this option in Visual C++ .NET, read the "Setting Visual
C++ Project Properties" online help topic. Solution Two: Locate and Correct the Problem ModuleTo view the current library link order, follow these steps:
- On the Project
menu, click Settings.
- In the Settings For view of the
Project Settings dialog box, click to select the project
configuration that is getting the link errors.
- On the Link tab, type
/verbose:lib in the Project Options
box.
- Rebuild your project. The libraries will be listed in the
output window during the linking process.
STATUS This
behavior is by design.
Modification Type: | Minor | Last Reviewed: | 1/23/2006 |
---|
Keywords: | kbtshoot kbArtTypeINF kberrmsg kbprb KB148652 kbAudDeveloper |
---|
|