交叉编译MiniGUI 参考

参考大漠孤狼《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的交叉编译。

你可能感兴趣的:(user,gcc,include,compiler,makefile,编译器)