[t:/]$ 지식_

libxml2에서 인코딩 문제. + pkg-config / encoding

2008/06/15

1.

libxml2 인코딩 관련 내용은 다음 URL에 기술되어 있다. http://xmlsoft.org/encoding.html

2.

이런 쪽 검색은 코드 내용을 완전히 1:1 검색하지 않는 한.
구글보다 위키가 더 나을 때가 많다.

libxml 의 위키페이지 http://en.wikipedia.org/wiki/Libxml

3.

libxml2 가 한글을 비롯하여 인코딩 문제를 잘 해결하려면 iconv 가 포함되어야 한다.
iconv의 위키페이지 http://en.wikipedia.org/wiki/Iconv

iconv 는 웹 하는 사람들은 많이 들어보았을 것이다. PHP 같은 데서도 종종 쓴다.

4.

임베디드에서 사용할 것이므로 스크래치 박스 상에서 빌드한다.

5.

libiconv 를 다운로드 받은 후 압축을 풀고 빌드한다.

./configure
make
make install

make install 시에 에러가 나지만 /usr/local/lib/ 에 제대로 있는 것을 확인했다면 그것으로 끝이다.
물론 /usr/local/include/libxml2 도 제대로 있는 지 확인한다.

6.

제 위치에 없다면 pkg-config 를 확인한다.

echo $PKG_CONFIG_PATH

그러면 보통 다음과 같이 나온다.

/usr/local/pkgconfig

해당 경로를 확인 했으니 진짜 내용을 살펴보자

cat /usr/lib/pkgconfig/libxml-2.0.pc

prefix=/usr/local
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
modules=1

Name: libXML
Version: 2.6.30
Description: libXML library version2.
Requires:
Libs: -L${libdir} -lxml2
Libs.private:  -lz  -lm
Cflags: -I${includedir}/libxml2

이 정보들은 다음과 같이 사용된다.

pkg-config –libs libxml-2.0

결과 :

-L/usr/local/lib -lxml2
pkg-config –cflags libxml-2.0

결과:

-I/usr/local/include/libxml2

따라서 Makefile 의 gcc 옵션에 (숫자 1 옆에 있는 역따옴표) 묶어서 써주면 알아서 들어간다.
몇몇 configure 파일 들은 가끔 문제를 일으키는 것 같다. 따라서 다음과 같이 pkgconfig 를 또 만들어둔다.

ln -s /usr/lib/pkgconfig /usr/local/lib

7.

libxml2를 빌드한다.
스크래치 박스 상이라면 문제 없다.

./configure –with-iconv –with-http
make
make install

각 위치에 제대로 있는 지 확인한다.

8.

주의사항!

libxml2 홈피에 보면 인코딩에 바로 있는 부분인데.
인코딩 문제 때문에 고생하는 분들이 의외로 있는 것 같다. 기본 중의 기본이다 -_- (사실은 내가 좀 헤멨다 ㅠ.ㅠ)

돌릴 XML 문서의 최상단에 인코딩을 명시한다.

<?xml version=”1.0″ encoding=”EUC-KR”?>

UTF-8 로 테스트해 본다.

9.

xml 파서가 정상동작하는지 테스트 해보고 싶다면 다음과 같이 한다.
libxml 디렉토리에서..

./testReader –count ./test/wap.xml

결과에 엘레먼트 값이 제대로 나왔다면 성공이다.

이제 임베디드 보드에서 다국어 XML을 파싱하는 기본이 갖추어졌다.
(응?)









[t:/] is not "technology - root". dawnsea, rss