안드로이드(Android) NDK는 wchar_t을 지원하지 않습니다.
오늘 Android 1.6 NDK에 포함된 툴 체인(Toolchain)을 사용하여 파이썬(Python) 3.1.1을 빌드 할 수 있는지 실험해 봤다. 목적은 NDK에 포함된 라이브러리가 어느정도의 호환성을 갖고 있는지 가늠해보기 위해서다. 자세한 결과는 나중으로 미루고 이번 포스트에서는 간단한 내용 몇개만 짚고 넘어간다. 구글링을 해보면 RandomSplat 에 파이썬 2.6.2를 크로스컴파일 하는 내용을 발견할 수 있다. 이 곳에 3.1.1 을 위한 패치가 있기는 하지만 그대로 동작하지는 않는다. ASE(Android Scripting Environment)에 포함된 파이썬도 2.6.2인 것으로 보일 뿐만 아니라 PDK를 사용하고 있다. 그래서 빌드 스크립트들에 몇 가지 사소한 수정을 하고, gcc wrapper 도 새로 만드는 식으로 하나씩 각개격파해 나가다 보니 크게 두 가지 문제가 있음이 드러난다. 하나는 localeconv() 함수가 지원되지 않는다는 것이고, 다른 하나는 wchar_t 이 char 와 동일하다는 것이다. 두 문제 모두 Bionic의 문제라고 볼 수 있는데, localeconv() 는 쉽게 만들어 넣을 수 있기 때문에 사소한 문제라고 할 수 있다. 하지만 wchar_t 가 2바이트 또는 4바이트가 아니라 1바이트인 것은 많은 코드들에서 문제를 일으킬 가능성이 높다. 윈도우즈에서 대부분 유니코드(Unicode)를 wchar_t 에 저장하는 습관을 들인 경우가 많기 때문이기도 한데, 사실 wchar_t 은 그다지 이식성 높은 방법이라고 볼 수 없다. C 표준에 의하면 wchar_t 은 1바이트가 되어도 무방하다. 도스(DOS)시절에는 이런 환경을 꽤 볼 수 있었지만, 최근에 다시 만나니 좀 당혹스럽다. 다시 원칙대로 갑시다. wchar_t 는 최대한 사용을 자제하셔야 합니다. 이미 발견하신 분들도 많으리라 생각됩니다만, 혹 모르고 있다가 당하면 많이 당황스러운지라 적어놓습니다.