본문 바로가기

Library/Windows Programming

CxImage LNK2019

CxImage는 현재 6.0 버전이 릴리즈되고 있지만, 실제로는 5.99c 버전의 버그를 약간 손 본 것이며, 릴리즈에 포함된 문서들은 6.0 버전임에도 불구하고 아직까지 5.99c로 표기되고 있다. 6.0 버전은 Visual C++ 6.0에 맞추어서 작성된 것이므로, Visual Studio 7.0 이상에서 빌드하고자 할 때 약간의 문제가 있다. 보안 문제로 인해 deprecated 문자열 함수들이 컴파일 경고를 무수하게 쏟아내며, 디폴트 세팅으로 라이브러리를 빌드했다면 링크 문제가 발생한다.

주로 LNK2019 에러가 쏟아져 나올텐데, 이것을 해결하는 방법은 CxImage를 빌드할 때 자신의 프로젝트에서 사용하는 스레딩 타입과 코드 타입을 일치시켜서 컴파일하는 것이다. 즉, Visual Studio 7.0 이상에서 Visual C++ 프로젝트를 새로 생성하면 보통 멀티스레드 - DLL 라이브러리, 유니코드로 선택된다. CxImage 라이브러리를 링크할 때 링크가 제대로 되지 않는다면 CxImage 라이브러리가 자신의 프로젝트 설정과 맞지 않게 빌드되었기 때문이다.

CxImage 프로젝트의 기본 문자 코드 선택은 Not Set으로 설정되어 있으며, 이 상태에서 그냥 빌드해서 만든 라이브러리를 링크하려고 하면 문자 코드 문제 때문에 LNK2019 에러가 발생한다. LNK2019 에러는 존재하지 않는 심벌에 대해 링크하려고 했을 때 발생하는 에러로, CxImage 클래스의 멤버 함수를 호출했을 때 시그니처를 정확하게 기술했음에도 링커가 심벌을 찾지 못했다면, 서로 다른 문자 코드로 빌드되었기 때문이다.

CxImage 프로젝트 설정을 열어서 직접 문자 코드를 유니코드로 맞춘 다음 빌드하려고 하지 말고, 그냥 간단히 Visual Studio 툴바의 Solution Configuration에서 유니코드 디버그나 유니코드 릴리즈를 선택하고 빌드하면 된다.  보통 프로젝트 설정에서 직접 UNICODE나 _UNICODE 플래그를 설정해도 같은 결과를 얻어야 하는데, CxImage의 경우 Solution Configuration에서 직접 지정해야 정확하게 원하는 바이너리가 생성된다.