Tips2020. 2. 6. 00:17

Visual Studio 6.0 로 생성한 MFC App을 컴파일 할 때 아래의 링크 에러가 난다면...

※ VS 6.0 임!

 

 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 libcpmtd.lib(delop.obj)

 

한마디로 LNK2005 라는 에러인데, 찾아보니, solution이 몇 개 있다.

 

 

1. library link 순서 변경

  Menu에서 -> Project -> Settings -> Link 탭 -> Category에서 Input 선택

      -> Object/library modules 항목에 Nafxcwd.lib Libcmtd.lib 입력

      -> 같은 곳에서 Ignore libraries  항목에 Nafxcwd.lib,Libcmtd.lib 입력

     ※ Object... 에는 library 사이에 ' ' 공백이어야 하고, Ignore... 에는 ',' comma여야 함.

 

 

2. 중복 링크 허용

  Menu에서 -> Project -> Settings -> Link 탭 -> Project Options 항목 끝에 '/FORCE:MULTIPLE' 입력

  그런데, 본인은 이 방법을 이용하면 프로그램이 죽는 것 같음.

 

 

3. MFC library 링크를 static --> shared로 변경

  Menu에서 -> Project -> General 탭 -> Microsoft Foundation Classes 항목에서 '... Shared ...'을 선택하여 build

  ※ 이 방법은 본인이 찾은 방법인데, 각자마다 환경이 다르므로, 안될 가능성이 높다.

 

 

  위의 에러는 release 때는 나지 않는 것 같고, debug에서만 나는 것 같으므로, debug는 shared MFC로

  release는 static으로 해주면 될 듯 하다.

 

Posted by JMAN