그래픽 라이브러리 - gxLib
gxLib란...
gxLib는 Frame Buffer를 이용한 그래픽 출력 라이브러리로 FALINUX 포럼에서, 회원들과 같이 제작하여 소스를 수정하지 않는 한 무료로 제공하고 있습니다. gxLib는 아직 기능이 미약하지만, 라이브러리 설치부터 간단하고 사용이 편리하다는 특징을 갖으며, 빠른 그래픽 출력에 목적을 두고 있습니다..
gxLib의 특징
- Device Context 개념을 적용. 모든 함수는 모든 출력 장치에 대해 동일하게 적용
즉, 복사 대상과 복사 원본에 따라 서로 다른 함수를 만들지 않는다.
하나의 함수로 모든 출력 장치를 이용 - 편리한 설치
PNG, JPG 등과 같은 공개된 라이브러리를 설치하면 프로그램에서 gxLib 소스를 참조하는 것 만으로도 사용이 가능
공개된 라이브러리는 설치 방법부터 사용방법까지 이미 많은 방법이 나와 있으며 검증된 상태. gxLib는 따로 설치할 필요 없이 Makefile에 등록하는 것 만으로도 설치없이 사용할 수 있어, 따로 설치해야 하는 어렴움이 없다. - 무료로 제공
포럼 회원이라면 gxLib 개발에 동참할 수 있으며, 포럼 회원이 아니더라고 gxLib가 제시한 저작권만 유의한다면 무료로 사용 가능
gxLib의 기능
- 직선, 박스, 원, 타원 등 기본 도형 출력 가능
- Bitmap, PNG, JPEG 이미지 출력 가능
gxLib 저작권
라이브러리 소스별로 입려력어 있는 상단의 주석을 변경하지 않는 이상, 무료로 사용이 가능하며 배포도 가능합니다. 개발자와 개발 정보를 알려 주는 상단의 주석문을 절대 변경하지 마십시오.
gxLib 설치 방법
gxLib의 최신 버전은 "그래픽 & 멀티미디어" 강좌에서 구하실 수 있으며, gxLib는 아직 추가할 내용이 매우 많고 필요에 의해 변경될 내용이 많아 lib 타입으로 제공하지 않고 소스타입으로 제공됩니다. 그러므로 함께 제공되는 예제 샘플과 같이 Makefile에서 gxLib 소스를 직접 링크하는 방식으로 사용하시면 됩니다. 이후로 어느정도 구색이 갖추어 지면 lib 파일로 제공할 수 있도록 하겠습니다.
gxLib는 글을 작성하는 현재 Bitmap, Jpeg, Png 이미지를 지원하고 있으며, 이와 같은 이미지를 사용하기 위해서는 PNG와 JPEG 라이브러리를 설치하셔야 합니다. PNG와 JPEG 라이브러리를 설치하지 않으시면, 이미지는 Bitmap만 사용이 가능하며, Bitmap만 사용하신다면 다른 라이브러리는 필요 없습니다.
그러나 임베디드 보드의 자원은 PC처럼 자원 상태가 풍요롭지가 못하기 때문에 파일을 작성한다고 해도 Jpeg나 PNG처럼 압축된 이미지를 사용하는 것이 유리합니다. 그러므로 가급적 아래의 설치 순서에 따라 필요 라이브러리를 설치하십시오.
- zlib 라이브러리 설치
- jpeg 라이브러리 설치
- png 라이브러리 설치
- gxLib를 프로젝트 소스와 함께 사용
zlib, jpeg, png 라이브러리는 i386과 타겟 보드별로 필요하므로 각각의 경우에 따라 어떻게 설치하는지 설명하겠습니다.
zlib 설치
JPEG나 PNG 이미지는 압축해서 저장하는 이미지이기 때문에 zlib가 필요하고, 가장 먼저 설치해 주어야 합니다.
이 글을 작성하고 있는 시점에서는 zlib 1.2.3이 릴리즈되었습니다. zlib를 아래와 같이 설치합니다.
1) zlib를 개발 호스트 PC에 설치
기본 값으로 설치를 실행하면 /usr 밑에 zlib의 lib 파일과 include 파일이 설치됩니다.
]# tar zxvf zlib-1.2.3.tar.tar ]# cd zlib-1.2.3 ]# ./configure ]# make && make install
에러 없이 컴파일되고 설치되었다면 성공입니다.
2) zlib를 크로스 컴파일 환경에 맞추어 설치
설치 예는 mips 칩을 사용한 EZ-AU1200에 맞추어 설명하겠습니다. 아울러 설치를 /usr/mipsel-linux 에 설치하겠습니다.
]# tar zxvf zlib-1.2.3.tar.tar ]# cd zlib-1.2.3 ]# CC=mipsel-linux-gcc AR="mipsel-linux-ar rc" RANLIB=mipsel-linux-ranlib ./configure
--prefix=/usr/mipsel-linux ** 주의 *** 위의 행은 한 번에 실행하세요. .confingure 를 따로 실행하시면 안 됩니다. ]# make && make install
에러 없이 설치되었다면 성공입니다. 만들어진 zlib를 타겟 보드에 복사해야 겠지요. 그런데 커널 2.6 이상의 EZ-보드에는 이미 zlib가 설치되어 있으므로 굳이 복사할 필요는 없습니다만, 그래도 적겠습니다.
]# cd /usr/mipsel-linux/lib
]# tar zcvf mipsel-lib-z.tar.gz libz*
만들어진 mipse-lib-z.tar.gz를 ez-board의 /lib 에 풀기를 하시면 됩니다.
JPEG 라이브러리 설치
JPEG 라이브러리는 아래의 사이트에서 구하실 수 있습니다.
Independent JPEG Group의 ftp://ftp.uu.net/graphics/jpeg 페이지에서 jpegsrc.v6b.tar.gz 파일을 내려 받아서 아래의 설명에 따라 설치하십시오.
1) JPEG라이브러리를 개발 호스트 PC에 설치
먼저 타겟보드가 아닌 개발 호스트용 PC에 설치해 보겠습니다. ftp 사이트에서 내려 받은 후에 임시 디렉토리로 복사하고 설치 작업을 하셔도 좋습니다만, wget을 이용하면 편하게 작업하실 수 있습니다. 라이브러리를 설치하는 만큼 root 권한으로 진행하겠습니다. 개발 호스트용 JPEG 라이브러리는 가급적 설치 위치를 바꾸지 마시고 기본 설치 장소로 설치하십시오. 그렇지 않으면 에러가 발생합니다. ^^
]# mkdir temp // 작업하기 적당한 디렉토리를 생성하고 이동 ]# cd temp ]# wget ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz --16:49:05-- ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz => `jpegsrc.v6b.tar.gz' Resolving ftp.uu.net... 192.48.96.9 Connecting to ftp.uu.net|192.48.96.9|:21... connected. Logging in as anonymous ... Logged in! ==> SYST ... done. ==> PWD ... done. ==> TYPE I ... done. ==> CWD /graphics/jpeg ... done. ==> SIZE jpegsrc.v6b.tar.gz ... 613261 ==> PASV ... done. ==> RETR jpegsrc.v6b.tar.gz ... done. Length: 613261 (599K) 100%[====================================================>] 613,261 254K/s in 2.4s 16:49:11 (254 KB/s) - `jpegsrc.v6b.tar.gz' saved [613261] ]# tar zxvf jpegsrc.v6b.tar.gz ]# cd jpeg-6b ]# mkdir /usr/local/man // 미리 메뉴얼을 위한 디렉토리를 생성합니다. 안하면 에러 발생 ]# mkdir /usr/local/man/man1 ]# ./configure --enable-shared // Makefile의 내용을 갱신합니다. ]# make && make install // JPEG 라이브러리를 설치
2) 타켓보드를 위한 JPEG 라이브러리 설치
설치 예는 au-1200을 대상으로 하겠습니다. 제가 제일 애용하는 보드라서요. ^^ 당연히 크로스 컴파일러는 mipsel-linux-gcc가 되겠습니다. 또한 PNG 라이브러리와 같이 /usr/mipxel-linux 에 설치하겠습니다.
]# mkdir temp // 작업하기 적당한 디렉토리를 생성하고 이동 ]# cd temp ]# wget ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz --16:49:05-- ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz => `jpegsrc.v6b.tar.gz' Resolving ftp.uu.net... 192.48.96.9 Connecting to ftp.uu.net|192.48.96.9|:21... connected. Logging in as anonymous ... Logged in! ==> SYST ... done. ==> PWD ... done. ==> TYPE I ... done. ==> CWD /graphics/jpeg ... done. ==> SIZE jpegsrc.v6b.tar.gz ... 613261 ==> PASV ... done. ==> RETR jpegsrc.v6b.tar.gz ... done. Length: 613261 (599K) 100%[====================================================>] 613,261 254K/s in 2.4s 16:49:11 (254 KB/s) - `jpegsrc.v6b.tar.gz' saved [613261] ]# tar zxvf jpegsrc.v6b.tar.gz ]# cd jpeg-6b ]# mkdir /usr/mipsel-linux/man/man1 // 미리 메뉴얼을 위한 디렉토리를 생성합니다. 안하면 에러 발생 ]# ./configure --enable-shared // Makefile의 내용을 갱신합니다. ////////////////////////////////////////////// 타겟보드에 맞추어 Makefile을 수정합니다. ]# vi Makefile 아래의 내용을 수정합니다. prefix = /usr/mipsel-linux CC= mipsel-linux-gcc AR= mipsel-linux-ar rc AR2= mipsel-ranlib ]# make && make install // JPEG 라이브러리를 설치
에러 없이 설치되었다면 성공입니다. 만들어진 jpeg 라이브러리를 타겟 보드에 복사해야 겠지요. 그런데 커널 2.6 이상의 EZ-보드에는 이미 라이브러리가 설치되어 있으므로 굳이 복사할 필요는 없습니다만, 그래도 적겠습니다.
]# cd /usr/mipsel-linux/lib
]# tar zcvf mipsel-lib-jpg.tar.gz lib-jpeg*
만들어진 mipse-lib-jpg.tar.gz를 ez-board의 /lib 에 풀기를 하시면 됩니다.
PNG 라이브러리 설치
이번에는 PNG 라이브러리입니다. 라이브러리는 위에서 언급드린 사이트에서 구하시면 됩니다.
http://www.libpng.org
http://www.libpng.org/pub/png/libpng.html
1) PNG 라이브러리를 개발 호스트 PC에 설치
내려 받은 라이브러리를 /usr 밑에 설치하겠습니다.
]# tar zxvf libpng-1.2.32.tar.gz ]# cd libpng-1.2.32 ]# cp scripts/makefile.linux Makefile ]# make && make install
에러 없이 설치되었다면 성공입니다.
2) 타겟보드를 위한 PNG 라이브러리 설치 및 복사
같은 압축 파일을 가지고 작업합니다.
]# tar zxvf libpng-1.2.32.tar.gz
]# cd libpng-1.2.32
]# cp scripts/makefile.linux Makefile
]# vi Makefile
// Makefile을 아래와 같이 타겟보드에 맞추어 컴파일러를 변경합니다.
// PC에서 사용한다면 변경할 필요가 없습니다.
-> AR_RC=mipsel-linux-ar rc
-> CC=mipsel-linux-gcc
-> RANLIB=mipsel-linux-ranlib
-> prefix=/usr/mipsel-linux
-> ZLIBLIB=/usr/mipsel-linux/lib
-> ZLIBLIB=/usr/mipsel-linux/include
]# make && make install
이제 타겟보드에 라이브러리를 복사해 주면 작업이 완료됩니다.
]# cd /usr/mipxel-linux/lib
]# tar zcvf /마운트 공유디렉토리/lib-png.tar.gz libpng12.so*
libpng12.so
libpng12.so.0
libpng12.so.0.1.2.32
]#
이제 타겟보드로 라이브러리를 복사하면 끝입니다. 제가 사용하는 EZ-S3C2440과 EZ-AU1200에는 이미 zlib가 들어 있네요. 해서 PNG 라이브러리만 EZ-보드에 아래와 같이 작업하여 타겟보드에 설치했습니다.
]$ cd /usr/arm-linux/lib --> 라이브러리 디레토리로 이동
]$ mout -t nfs -o nolock [타겟보드 IP]:/NFS 공유 디렉토리 /mnt/nfs
]$ tar zxvf /mnt/nfs/lib-png.tar.gz
gxLib가 어느 정도 구색(?)을 모두 갖추기 전까지는 소스로만 제공하겠습니다.
mipsel-linux 를 arm-linux로 변경하고, 컴파일 했더니
<에러메시지1>
./libtool --mode=compile arm-linux-gcc -O2 -I. -c ./cjpeg.c
make: ./libtool: 명령을 찾지 못했음
make: *** [cjpeg.lo] 오류 127
에러메시지를 수정하기 위해 libtool을 동일한 디렉토리에 옮기고 나서 make 하니 아래의 에러가 발생합니다.
<에러메시지 2>
./libtool --mode=compile arm-linux-gcc -O2 -I. -c ./jcapimin.c
libtool: compile: unable to infer tagged configuration
libtool: compile: specify a tag with `--tag'
make: *** [jcapimin.lo] 오류 1
요거 해결할 방법이 있을까요????