Dev

VC++ 2005에 Windows SDK 6.0 설치 후 ConvertBSTRToString에서 LNK2019 발생

prostars 2010. 5. 5. 17:10
Windows SDK도 깔지 않고 서비스 팩만 설치한 기본 VC++2005 개발 환경에서 프로토타입만 개발한다는 게...알파 버전까지 진행되었다.
뒤늦게 문제가 되어 VC++ 2005에 Windows SDK 6.0을 설치했는데...
빌드가 안된다 -_-;

링크 에러가 발생한다.
--------------------------------------------------------------------------------------
오류    3    error LNK2019: unresolved external symbol "wchar_t * __stdcall _com_util::ConvertStringToBSTR(char const *)" (?ConvertStringToBSTR@_com_util@@YGPA_WPBD@Z) referenced in function "public: __thiscall _bstr_t::Data_t::Data_t(char const *)" (??0Data_t@_bstr_t@@QAE@PBD@Z)    noname.obj
--------------------------------------------------------------------------------------


구글링 결과 위와 같은 링크 에러가 발생하면 아래와 같이 하면 해결이 된다는 간단한 해결책이 나온다.
--------------------------------------------------------------------------------------
#ifdef _DEBUG
#pragma comment(lib, "comsuppwd.lib")
#else
#pragma comment(lib, "comsuppw.lib")
#endif

하거나...

'wchar_t를 기본 제공 형식으로 처리'옵션을 '아니오'(/Zc:wchar_t)로 설정하면 된다.
--------------------------------------------------------------------------------------

왜 Windows SDK를 설치하고 나서 문제가 되었는지 조금 더 들어가 보면 Windows SDK에서 제공된 comdef.h가 VC++ 2005에서 기본 제공된 comdef.h와 comsupp.lib 링크 부분이 다르다는 것을 확인할 수 있다.

C:\Program Files\Microsoft Visual Studio 9.0\VC\include\comdef.h
--------------------------------------------------------------------------------------
#ifdef _NATIVE_WCHAR_T_DEFINED
# ifdef _DEBUG
# pragma comment(lib, "comsuppwd.lib")
# else
# pragma comment(lib, "comsuppw.lib")
# endif
#else
# ifdef _DEBUG
# pragma comment(lib, "comsuppd.lib")
# else
# pragma comment(lib, "comsupp.lib")
# endif
#endif
--------------------------------------------------------------------------------------

C:\Program Files\Microsoft SDKs\Windows\v6.0\Include\comdef.h
--------------------------------------------------------------------------------------
#pragma comment(lib, "comsupp.lib")
--------------------------------------------------------------------------------------

Windows SDK 6.1의 comdef.h는 확인을 못 해봤다.

왜 저런 차이가 생겼을까...?

관련 자료: http://msdn.microsoft.com/ko-kr/library/799kze2z(VS.90).aspx
반응형