programming notes

View on GitHub

VS2003에서 VS2008로 옮기다가 링크에러를 만났다
LNK2019 에러가 발생하였는데..

A 프로젝트와 B 프로젝트가 있고
B 프로젝트가 A 프로젝트를 참조하는 구조였다. (이하 A, B라고 만 하겠음)

B에서 A의 클래스 CTest의 wchar_t getname() 의 정의를 못 찾는 것이었다.

왜 그럴까 찾아보니 원인은 빌드 옵션이었다.
A는 /Zc:wchar_t- 옵션이 꺼져있어서 wchar_t를 기본형식으로 처리하고
B는 반대였다.

그래서 문제는 A에는 wchar_t getname()으로 정의가 되었는데,
B에서 short getname()으로 찾아서 해당 함수 정의를 찾지 못 찾아 LNK2019가 발생하였다.
(A는 wchar_t이고, B는 short 이라는 건 짐작일 뿐 정확하진 않아요.)

2003에서는 발견되지 않은 문제였는데.. 2003은 버림받은 툴이라더니.. - -
역시 사용하는 툴을 업그레이드 하는 것도 일이다.

wchar_t를 반환 값 또는 인자 형식으로 사용하는 함수를 못 찾는 링크에러가 발생시에는
“whcar_t를 기본형식으로 처리” 옵션이 통일되어 있는지 확인해보세요!

이 옵션은 VS2008 한글판 기준으로
속성 -> C/C++ -> 언어 -> wchar_t를 기본형식으로 처리에 있다.