2014년 7월 16일 수요일

QT 와 wchar_t 옵션 문제

QT 4.x 설치 버전들은 기본적으로 /Zc:wchar_t- 옵션으로 컴파일되어 있습니다.
아마도 vc2005 버전이 기본적으로 /Zc:wchar_t- 옵션을 갖고 있기때문으로 짐작됩니다.

그래서또 다른 라이브러리 X가 /Zc:wchar_t 옵션(끝에 - 가 없음)을 가진채 컴파일 되었다면(vc2008 부터는 /Zc:wchar_t 옵션이 기본으로 바뀌었습니다.) QT 와 X 를 모두 사용하는 프로그램 A에서는 QString::fromWCharArray 와 QString::toWCharArray 를 사용할수 없게 됩니다.

QString::fromWCharArray 와 QString::toWCharArray 를 A 에서 사용한채로 컴파일한다고 가정할때,

QT를 사용하기 위해 A 를 /Zc:wchar_t- 옵션으로 컴파일하는 순간 X 에서 링크에러를 밷어낼 가능성이 많고,
X를 사용하기 위해 A 를 /Zc:wchar_t 옵션으로 컴파일하면 QT 에서 링크에러를 밷어낼 가능성이 또 많기 때문입니다.

방법은  QString::fromWCharArray 와 QString::toWCharArray 의 소스코드를 A 에 이식해서 좀 다른 이름으로 명명한다음 이렇게 이식된 코드를 사용하는 방법이 있고,

혹은 QT 자체를 다시 컴파일 하는 방법이 있습니다.
참조1 : https://qt.gitorious.org/qt/richs-qtbase/commit/cadbfc07b68513920bb877e2e0212988c43f1fa4
참조2 : http://www.holoborodko.com/pavel/2011/02/01/how-to-compile-qt-4-7-with-visual-studio-2010/

여러 라이브러리를 사용할때는 항상 여러가지 문제가 생길수 있지만..
이런 경우는 Link error: 2019 에러가 뜨면서 msdn 사이트의 공식 문서( http://msdn.microsoft.com/en-us/library/799kze2z%28v=vs.90%29.aspx )를 통해 대략 원인을 찾아낼수 있었습니다.