LNK2005 "public: __thiscall CSize::CSize(void)" 이(가) atltypes.obj에 이미 정의되어 있습니다.
비주얼 스튜디오 2008에서 2015로 마이그레이션 중 아래와 같은 에러가 있었습니다.
LNK2005 "public: __thiscall CSize::CSize(void)" 이(가) atltypes.obj에 이미 정의되어 있습니다.
CSize는 MFC에서 많이 보던 놈인데 왜 win32 프로젝트에서 저런 에러가 날까 싶더군요. 링크에러가 발생하는 atltypes 키워드로 검색을 해보니 아래와 같이 2가지 타입이 나왔습니다.
#include "atltypes.h"
#include <AtlTypes/atltypes.h>
어떤곳은 atltypes.h로 어떤곳은 AtlTypes/atltypes.h로 사용중인데 atltypes.h은 Visual Studio 설치된 곳에 있는 include 파일입니다.
c:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\atlmfc\include\atltypes.h
AtlTypes/atltypes.h의 경우는 MS의 atltypes.h를 가져와서 자체적으로 약간 수정해서 만든 파일이더군요. 뭐 아래와 같이 CSize 같은게 또 있더군요.
class CSize : public tagSIZE
...
왜 이래놨는지.... 아무튼 자체 h 인 #include <AtlTypes/atltypes.h> 를 사용하게 바꿔주면 링크에러는 사라집니다.
보통은 아래와 같이 inline 문제 이거나 h 파일에 변수를 선언해놓고 중복 으로 include를 해서 사용했을 때 발생하긴 합니다.
inline 때문에 생긴 error LNK2005
error LNK2005가 또 날 괴롭히는구나
LNK2005 "public: __thiscall CSize::CSize(void)" 이(가) atltypes.obj에 이미 정의되어 있습니다.
CSize는 MFC에서 많이 보던 놈인데 왜 win32 프로젝트에서 저런 에러가 날까 싶더군요. 링크에러가 발생하는 atltypes 키워드로 검색을 해보니 아래와 같이 2가지 타입이 나왔습니다.
#include "atltypes.h"
#include <AtlTypes/atltypes.h>
어떤곳은 atltypes.h로 어떤곳은 AtlTypes/atltypes.h로 사용중인데 atltypes.h은 Visual Studio 설치된 곳에 있는 include 파일입니다.
c:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\atlmfc\include\atltypes.h
AtlTypes/atltypes.h의 경우는 MS의 atltypes.h를 가져와서 자체적으로 약간 수정해서 만든 파일이더군요. 뭐 아래와 같이 CSize 같은게 또 있더군요.
class CSize : public tagSIZE
...
왜 이래놨는지.... 아무튼 자체 h 인 #include <AtlTypes/atltypes.h> 를 사용하게 바꿔주면 링크에러는 사라집니다.
보통은 아래와 같이 inline 문제 이거나 h 파일에 변수를 선언해놓고 중복 으로 include를 해서 사용했을 때 발생하긴 합니다.
inline 때문에 생긴 error LNK2005
error LNK2005가 또 날 괴롭히는구나
댓글
댓글 쓰기