kyuseo의 게임 프로그래밍

error LNK2019 :: WCHAR (wchar_t) 을 이용한 프로그래밍에서 주의사항 (Visual Studio 2003) 본문

C++ 개발

error LNK2019 :: WCHAR (wchar_t) 을 이용한 프로그래밍에서 주의사항 (Visual Studio 2003)

kyuseo 2007. 12. 28. 19:50

개요..

 

Visual Studio 2003에서  WCHAR (wchar_t) 을 이용한 프로그래밍에서 주의사항에 대하여 설명해드립니다.

 

 

오류 재현

 

// wchar_t 사용 클래스

class CTest
{
public:
 CTest(void);
 ~CTest(void);

 int Get( char c );
 int Get2( wchar_t s );
};

 

 

// 외부에서 위 클래스 함수 호출시 오류

_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) 함수에서 참조)를 확인하지 못했습니다.
Debug/_mfc_test.exe : fatal error LNK1120: 1개의 확인할 수 없는 외부 참조입니다.

 

 

해결방안

 

속성 -> 언어 에 /Zc:wchar_t 옵션을 추가한다.

 

 

참고 : msdn

 

LNK2001 확인할 수 없는 외부 기호 오류

wchar_t 형식(BSTR 및 LPWSTR은 wchar_t*가 됨)을 사용하는 정적 라이브러리 또는 DLL에서 함수를 호출할 때는 LNK2001 확인할 수 없는 외부 기호 오류가 발생할 수 있습니다.

이 오류는 새 MFC 프로젝트에서 기본적으로 설정되는 /Zc:wchar_t 컴파일러 옵션으로 인해 발생합니다. 이 옵션을 사용하면 컴파일러에서는 wchar_t를 네이티브 형식으로 처리하게 됩니다. Visual C++ .NET 이전에는 wchar_tunsigned short로 처리되었습니다.

주 프로젝트 및 라이브러리에서 /Zc:wchar_t에 대해 동일한 설정을 사용하지 않는 경우에는 함수 시그니처가 일치하지 않게 됩니다. 이러한 문제가 발생하지 않도록 하려면 /Zc:wchar_t 컴파일러 옵션을 사용하여 라이브러리를 다시 빌드하거나, 속성 페이지 대화 상자의 언어 속성 페이지에 있는 wchar_t를 내장 형식으로 처리 설정을 사용하여 주 프로젝트에서 이 옵션의 설정을 해제합니다.