kyuseo의 게임 프로그래밍
error LNK2019 :: WCHAR (wchar_t) 을 이용한 프로그래밍에서 주의사항 (Visual Studio 2003) 본문
error LNK2019 :: WCHAR (wchar_t) 을 이용한 프로그래밍에서 주의사항 (Visual Studio 2003)
kyuseo 2007. 12. 28. 19:50개요.. |
Visual Studio 2003에서 WCHAR (wchar_t) 을 이용한 프로그래밍에서 주의사항에 대하여 설명해드립니다.
오류 재현 |
// wchar_t 사용 클래스 class CTest int Get( char c );
// 외부에서 위 클래스 함수 호출시 오류 _mfc_testDlg.obj : error LNK2019: "public: int __thiscall CTest::Get2(wchar_t)" (?Get2@CTest@@QAEH_W@Z) 외부 기호("protected: virtual int __thiscall Cmfc_testDlg::OnInitDialog(void)" (?OnInitDialog@Cmfc_testDlg@@MAEHXZ) 함수에서 참조)를 확인하지 못했습니다. |
해결방안 |
속성 -> 언어 에 /Zc:wchar_t 옵션을 추가한다.
참고 : msdn |
LNK2001 확인할 수 없는 외부 기호 오류
wchar_t 형식(BSTR 및 LPWSTR은 wchar_t*가 됨)을 사용하는 정적 라이브러리 또는 DLL에서 함수를 호출할 때는 LNK2001 확인할 수 없는 외부 기호 오류가 발생할 수 있습니다.
이 오류는 새 MFC 프로젝트에서 기본적으로 설정되는 /Zc:wchar_t 컴파일러 옵션으로 인해 발생합니다. 이 옵션을 사용하면 컴파일러에서는 wchar_t를 네이티브 형식으로 처리하게 됩니다. Visual C++ .NET 이전에는 wchar_t가 unsigned short로 처리되었습니다.
주 프로젝트 및 라이브러리에서 /Zc:wchar_t에 대해 동일한 설정을 사용하지 않는 경우에는 함수 시그니처가 일치하지 않게 됩니다. 이러한 문제가 발생하지 않도록 하려면 /Zc:wchar_t 컴파일러 옵션을 사용하여 라이브러리를 다시 빌드하거나, 속성 페이지 대화 상자의 언어 속성 페이지에 있는 wchar_t를 내장 형식으로 처리 설정을 사용하여 주 프로젝트에서 이 옵션의 설정을 해제합니다.