ibiconv 라이브러리는 GNU 프로젝트의 하나로 인코딩간의 변환을 지원한다. linux 계열의 소프트웨어에서 문자열 인코딩 변환은 전부 이 라이브러리로 이루어질 정도로, 아주 중요한 포지션을 담당하는 라이브러리이다. 예를 들어 php의 iconv() 함수는 최종적으로 이 라이브러리를 사용하게 된다.

Windows의 경우 인코딩 간 변환은 WideCharToMultiByte() 나 MultiByteToWideChar() 함수를 통해 할 수 있기 때문에 대부분의 경우 libiconv가 필요 없다. 하지만 Windows Mobile 환경에서는 OS 언어에 대한 문자열 변환만을 지원하기 때문에, libiconv와 같은 인코딩 변환 라이브러리가 필요해진다.

따라서 이 글에서는 libiconv를 Visual Studio에서 컴파일하는 방법을 살펴보기로 한다.

linux 쪽의 프로젝트를 포팅하는 경우에는 Visual Studio 프로젝트 파일을 어떻게 구성할지가 제일 난감하다. libiconv 의 경우도 어디서부터 손을 대어야 할지가 굉장히 난감했었는데, 소스 파일을 들여다 보면, 다행히도 대부분이 헤더 파일이고 c 파일은 몇 개 없다는 사실을 발견할 수 있다.

두번째로 다행인 점은 다른 오픈 소스 프로젝트와는 다르게, libiconv의 경우에는 몇 버전 전까지만 해도 Visual Studio 에서 native compile을 지원했었다. 하지만 아쉽게도, 이제는 mingw 프로젝트 때문에 win32용 응용 프로그램을 gcc로 컴파일할 수 있게 되어 더 이상 지원하지 않는다고 한다. 그러나 일단 VS용으로 터닦이 공사가 끝난 터라 큰 문제 없이 포팅 가능하다.

기본적으로 다음과 같은 수순으로 작업하면 된다. libiconv 1.13.1을 사용하였다.

  1. visual studio 에서 dll 프로젝트를 구성한다.
  2. 컴파일해야 하는 소스 파일은 3개.  lib/iconv.c  lib/relocatable.c libcharset/lib/localcharset.c   뿐이다. 컴파일 할 때 발생하는 include path 관련 에러를 모두 잡아준다.
  3. libcharset/include/libcharset.h.build.in 과 include/iconv.h.build.in 의 확장자를 수정하여 h 파일로 바꾼다. build.in을 사용하는 이유는 dll export 키워드를 넣어주기 위함이다.
  4. localcharset 에서 LIBDIR 관련 에러가 나는데, 주석으로 막아버린다.
  5. @HAVE_VISIBILITY@ 나 @DLL_VARIABLE@ @ICONV_CONST@ 따위가 있는데, 이건 autoconf 에서 자동으로 이름이 바뀌는 변수들로, 각각 없애고, 없애고, const로 바꿔주면 된다.

여기까지가 win32 용의 dll로 컴파일 하는 방법이다. 좀 더 자세한 변경 사항을 보고 싶다면, http://wiki.michgan.net/moin.cgi/iconv/Windows 을 본다.

Windows Mobile 용의 dll로 컴파일하려면 위의 작업에서 추가적으로 errno 변수 관련 작업을 해줘야 한다. Windows Mobile 에는 errno 변수가 없기 때문이다. 그냥 dll 내에서 int errno; 라고 선언하고 몇몇 매크로를 define 해주는 것으로 컴파일이 가능하다.
물론 errno 값을 dll 외부에서 확인하려면 조회할 수 있는 함수와 thread local storage에 저장이 되도록 구현해야겠지만, 에러 유무만 알면 됐지 뭐. diff 파일이 필요하다면 http://wiki.michgan.net/moin.cgi/iconv/WindowsMobile 을 본다.

이상으로 libiconv 프로젝트를 win32 용의 dll로 컴파일 하는 방법을 살펴 보았다.
참고로 libiconv는 LGPL 라이센스이다.

출처 : http://blog.michgan.net/49

신고

'빵꾸똥꾸 개발자 > Windows' 카테고리의 다른 글

win32 vc2005/2008 배포시 문제 해결  (0) 2010.03.24
[win32] libiconv 포팅하기  (0) 2010.03.17
Posted by 나마스떼

댓글을 달아 주세요



티스토리 툴바