예전에 aesop site가 망가지기전에(2차 공제후)
이제현님이 SDL한글출력에 대한 글을 올린적이 있는데, 제가 캡쳐해 놓은게
있네요.
일단 보시기 바랍니다.
==========================================
SDL 한글 출력 (영문 텍스트 뷰어에 한글이 나오도록..)
안녕하세요? 오랜만입니다.
Scratchbox 루트파일시스템이 아니어도,
영문 텍스트 뷰어에서 한글을 뿌리는 방법을 찾았습니다.
문제가 있던 iconv() 함수를 동작시키려면, 라이브러리가 필요합니다.
우선 다음 사이트로 가보세요.
http://www.gnu.org/software/libiconv/
대충 내용을 한번 읽어 보시고, libiconv-1.9.1.tar.gz 를 받으세요.
그 다음 압축을 풀고, 다른 SDL 라이브러리 컴파일 하듯이 환경 변수 잡아주시고...
export CC=arm-linux-gcc;export AR=arm-linux-ar;export LD=arm-linux-ld;export RANLIB=arm-linux-ranlib
configure 를 구성해주시고..
./configure --build=i386 --host=arm --target=arm-linux --prefix=/usr/local/arm/oe/arm-linux --with-sdl-prefix=/korea-dokdo/aesoptool/gcc-3.3.4-glibc-2.3.3/arm-linux/arm-linux
make 하시고...
make install 하시고...
그리고 다음 파일들을 루트FS의 라이브러리 폴더로 복사합니다.
(소프트링크도 있으니 삼바로 하지 마시고, 리눅스위에서 하세요.)
libiconv.so
libiconv.so.2
libiconv.so.2.2.0
libiconv_plug.so
libiconv_plug_linux.so
그리고 마지막으로 다음 항목을 보드에서 설정해 주세요.
(/usr/local/lib/에 설치했다면.)
export LD_PRELOAD=/usr/local/lib/libiconv_plug.so
기존 커널서비스의 iconv를 위에서 컴파일한 라이브러리로 치환해 주는 기능입니다.
이렇게 하고나니, iconv_open( "UTF-8", "EUC-KR" )가 잘 동작합니다.
다음은 제가 사용중인 변환 함수입니다.
예전에 어느분이 올리신것은 free()가 없어서 몇번 호출하면 segmentation 에러가 날겁니다.
그래서, 변환 결과를 전역변수 배열로 저장합니다.
==========================================================================================
char utf8_buffer[512];
// This function is not working due to absence of iconv .SO files on the rootfs.
// But, we can make it work with libiconv. Do "export LD_PRELOAD=/lib/libiconv_plug.so" first.
char* euckr_to_utf( const char* str ){
iconv_t cd;
char* outbuf,* out;
size_t ileft, oleft;
int err;
int len;
len = strlen( str );
ileft = len;
oleft = len * 4;
out = outbuf = utf8_buffer;
cd = iconv_open( "UTF-8", "EUC-KR" );
if ((int)cd <= 0)
{
printf ("iconv_open failed!n");
}
err = iconv( cd, (char**)&str, &ileft, &outbuf, &oleft );
iconv_close( cd );
return out;
}
=========================================================================
참고로 EUC-KR은 KS5601코드이고, UTF-8은 유니코드의 UTF 표현입니다.
주의할것은 변환된 결과가 512바이트를 넘으면 안됩니다. 나중에 손좀 보겠습니다. malloc으로..
그리고, UTF 체계를 좀 알아보시길 바랍니다.
한번 들여다 보았는데, 재미있네요.. 서양놈들 기준으로 만든것 같지만..
실제 한글 출력은 다음과 같이 해보세요.
=========================================================================================
surfaceTitle = TTF_RenderUTF8_Blended(font, euckr_to_utf("한글과 English"), White);
SDL_Rect rect={abs(480-surfaceTitle->w)/2,2,surfaceTitle->w,surfaceTitle->h};
SDL_BlitSurface(surfaceTitle, NULL,screen, &rect);
SDL_UpdateRect(screen, 0, 0, 0, 0); /* update screen */
===========================================================================================
제가 사용중인 개발환경과 차이가 있어, 여러분은 어떨지 잘 모르겠습니다.
결과 있으면, 알려주세요.
이 iconv는 후에 X 윈도우에서도 필요한것 같습니다.