参考大漠孤狼《MiniGUI 1.3.3 移植详解》
其中大漠孤狼《MiniGUI 1.3.3 移植详解》使用的交叉编译器的版本是2.95.3,参考他的步骤编译成功后,将库COPY到目标上后,编译后的可执行文件不能运行,提示illegal instruct,不得以尝试更换交叉编译器的版本,在http://arm.cirrus .com 下载了一个3.3交叉编译器重新编译器,重新按照
大漠孤狼《MiniGUI 1.3.3 移植详解》中步骤来编译库:
基于MiniGUI库的应用程序需要下面的几个库:
libminigui-1.3.so.3
libpng.so.2 -> libpng.so.2.1.0.10rc1
libpng.so.2.1.0.10rc1
libttf.so
安装交叉编译工具:
user]# cd $HOME
[user]# vi .bashrc
在 .bashrc 最后面加上一句
export PATH="$PATH:/sbin:/usr/local/arm/2.95.3/bin:/usr/local/bin:/usr/local"
source .bashrc
安装zlib库:
下载地址:http://www.zlib.net/zlib-1.2.3.tar.gz
[user]# tar zxf zlib-1.2.3.tar.gz
[Root]# cd /usr/bin
[Root]# mv gcc gcc_back
[Root]# ln -s /usr/local/arm/3.3/bin/arm-linux-gcc ./gcc
[Root]# mv ld ld_back
[Root]# ln -s /usr/local/arm/3.3/bin/arm-linux-ld ./ld
[user]# ./configure --prefix=/usr/local/arm/3.3/ --shared
[user]# make
[Root]# make install
安装完后检查一下目录 /usr/local/arm/2.95.3/arm-linux/ [include,lib] ,假如 include 中没有 zlib.h 之类的头文件,lib 中没有 libz.so.1.2.3 ,那就自己手动拷到这些目录下去,记着拷的时候把所有的 *.h 都需要拷过去,在拷库的时候用 cp –a libz.* /…./lib 就行,要用上 –a 选项
记着把刚才改过的 gcc 再改回去,不然后面会出错的!!!!!
安装 png 库:
下载地址:http://superb-east.dl.sourceforge.net/sourceforge/libpng/libpng-1.0.10rc1.tar.gz
[user]# tar zxf libpng-1.0.10rc1.tar.gz
[user]# cd libpng-1.0.10rc1
Libpng 不提供有效的 configure 脚本,所以只好自己动手改 Makefile 文件了
[user]# cp scripts/makefile.linux Makefile //把 Scripts 下的一个 makefile 拷出来自己动手改
[user]# vi Makefile // 自己动手改
CC=arm-linux-gcc //修改这里
# where "make install" puts libpng.a, libpng.so*, png.h and pngconf.h
prefix=/usr/local/arm/3.3 //修改这里
# Where the zlib library and include files are located
#ZLIBLIB=/usr/local/lib
#ZLIBINC=/usr/local/include
ZLIBLIB=/usr/local/arm/3.3、lib //修改这里
ZLIBINC=/usr/local/arm/3.3/include //修改这里
好了,保存,然后去编译吧
[user]# make
[user]# make install
如果有错误,检查你前面的步骤哪个没做对 :) 尤其是 zlib 的安装
还是前面说的,检查 /usr/local/arm/3.3/ [include,lib] 目录中有成功安装否,如果没有安装成功,那就自己把编译出来的东西拷过去。记着,*.h 和 .so 的文件都要拷。
安装jpeg 库:
jpeg 库下载地址:ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz
[user]# tar zxf jpegsrc.v6b.tar.gz
[user]# cd jpeg-6b
[user]# ./configure –help //可以查看它的配置选项
首先在本机上编译一下,主要是它的 configure 文件设计得有问题,得先用 gcc 编译一个 dummy.c 的文件,然后才能后面编译,不然的话就会出现 libtool 找不到之类的错误
[user]# ./configure --enable-shared --enable-static
本机正常编译通过以后,[user]# make clean 清除掉,然后执行交叉编译
一般情况下用 [cdp@cdpserver jpeg-6b]$ ./configure --prefix=/usr/local/arm/3.3/ --host=arm-linux --enable-shared --enable-static
--host=arm-linux 来指定交叉编译选项,可是这里死活它不认,所以改用别的方法,如下
[user]# ./configure --prefix=/usr/local/arm/3.3 CC=arm-linux-gcc --enable-shared --enable-static
[user]# make
安装前需要在 arm-linux 下建个目录,不然安装会出错
[Root]# mkdir –p /usr/local/arm/3.3/arm-linux/man/man1
[Root]# make install // OK 了
一样,自己去检查一下安装是否成功 :)
安装 libttf 库:
http://nchc.dl.sourceforge.net/sourceforge/freetype/freetype-1.3.1.tar.gz
[user]# tar zxf freetype-1.3.1.tar.gz //老一套
[user]# cd freetype-1.3.1 //进到目录里去
[user]# mkdir –p /opt/st2410/libttf/extend // 自己另外建立一个目录
[user]# cp freetype-1.3.1/lib/* freetype-1.3.1/lib/arch/ansi/* libttf/ //把有用的东西拷出来
[user]#cp freetype-1.3.1/lib/extend/* libttf/extend/ 把 extend 目录下的文件也拷出来
注意 cp 命令不要用 –r 选项,因为会把一些没用的东西出拷出来的
拷贝完成了,现在来自己手动编译了
[user]# cd libttf
[user]# arm-linux-gcc -c -fPIC -O2 freetype.c //不要奇怪,对,我们只要编译这一个 .c 文件,因为它包括了其它所有的 .c 文件了,你可以自己查看它的内容
[user]# arm-linux-gcc -c -fPIC -O2 -I./ extend/*.c 把 extend 下所有的 .c 文件全部编译
[user]# arm-linux-gcc --shared -o libttf.so *.o 生成最后的动态链接库,OK了
现在手动安装,得自己建立一下目录
[Root] mkdir –p /usr/local/arm/3.3 /include/freetype1/freetype
[Root] cp *.h extend/*.h /usr/local/arm/3.3/include/freetype1/freetype
[Root] cp libttf.so /usr/local/arm/3.3/ lib
经过试验发现 MiniGUI 1.3.3 版本在链接 ljpeg lpng lttf 时老是要链接 /usr/lib 下的库,没办法,用老方法
[Root]# cd /usr/lib
[Root]# mv libjpeg.so libjpeg.so_back
[Root]# ln –s /usr/local/arm/2.95.3/arm-linux/lib/libjpeg.so ./libjpeg.so //指向 arm 的库
[Root]# mv libpng.so libpng.so_back
[Root]# ln –s /usr/local/arm/2.95.3/arm-linux/lib/libpng.so ./libpng.so
[Root]# mv libttf.so libttf.so_back
[Root]# ln –s /usr/local/arm/2.95.3/arm-linux/lib/libttf.so ./libttf.so
完成以上工作后就可以编译 libminigui 了
user]# cd libminigui-1.3.3
[user]# make menuconfig //就用图形界面来配置就好了,不要用一堆 –enable-xxx 之类的,太麻烦
· 在 Input Medthold Option 里
· IME (GB2312) support
[ ] IME (GB2312) Intelligent Pinyin module //千万不要选这个,不然后面你的 mginit 程序一启动就崩溃了(Abort ,有点像 OOP 一样,显示所有的寄存器的值,然后Abort),暴不爽
在 Development Environment Option 里
(Linux) Platform
(arm-linux-gcc) Compiler //注意这里
(glibc) Libc //注意这里
--- Installation options
Path prefix: "/usr/local/arm/2.95.3/arm-linux" //注意这里,我们把库装到交叉编译器的目录下
--- Additonal Compiler Flags
CFLAGS: ""
LDFLAGS: ""
[user]# make //又是一个漫长的等待,呵
[Root]# make install
· 在编译的时候会遇到一个语法错误,收到修改一下文件,再保存,是语法错误,是交叉编译器不支持那种格式的语法,很容易修改的,接下来编译会很顺利,在连接的时候可能会出现找不到PNG库的现象,我采取的方法是将/3.3/lib/libpng* /3.3/arm-linux/lib/目录中,同时再编译完成后也需要上面的那些库从/3.3/lib/ COPY到/3.3/arm-linux/lib/中,否则在编译应用程序时会出现连接错误,也就是说找不到相应的动态链接库。这样就完成了MiniGUI的交叉编译。