minigui-1.3.3及其示例程序编译的详细过程
金陵书生<ouyang_njupt (at) 126.com>
2008.05.16
在开始介绍minigui的编译过程之前,先给出两个对本文档的说明。首先,本文档介绍的是交叉编译minigui,因此所编译出来的所有可执行文件都只
能在目标板上运行,试图在编译后直接运行是得不到任何结果的,而且还会提示说不是可执行文件(elf)。其次,文档中的linux命令都采用灰色背景跟其
他文字区分开来。命令中的的第一个字母>表示用户console窗口中的命令提示符,具体操作的时候请不要输入该字符。
文档本来是为项目写的,因此署了常用的邮箱,没想到马上就有垃圾邮件过来了。真烦人。
一。编译华恒科技移植好的minigui-1.3.3库及其测试程序
执行了HHARMMX21附带的光盘中的arminst后会创建好/HHARMMX21目录,其中minigui位于/HHARMMX21/applications/minigui-free/目录下。该目录下的HHTECH.readme是编译华恒科技移植好的minigui的过程说明。
执行HHTECH.readme中的前四个步骤(如下):
Step 1:
cd
/HHARMMX21/applications/minigui-free/libminigui-1.3.3
./HHTECH.inst.lib
Step 2:
cd
/HHARMMX21/applications/minigui-free/mg-samples-1.3.1/
./HHTECH.compile.mg
Step 3:
cd
/HHARMMX21/applications/minigui-free/minigui-res-1.3.3/
./HHTECH.insti
Step 4:
/HHARMMX21/applications/minigui-free/nfsroot
./HHTECH.reduce.lib
执行完这四步以后,minigui库已经编译和安装好了。但是mg-samples中的示例程序都是些演示某个单一控件的使用方法的小程序。使用minigui来开发的复杂一点的程序都在mde中。而华恒科技提供的说明文档中并未提到这一点。根据分析,华恒科技提供的mde无法直接编译通过,估计就是因为这样华恒科技才没有在HHTECH.readme中给出mde的编译过程。下面是我根据网络资料和对mde进行分析后实践出来的mde编译过程。
二。
编译mde-1.3.0
mde的编译需要用到
popt库,因此我们需要先下载和编译popt库。我已经将libpopt库上传到实验室内部网站了,在上传下载中可以找到,文件名为popt_1.10.orig.tar.gz。
-
交叉编译libpopt
libpopt的编译比较简单,关键在于使用正确的交叉编译工具。
tar xvzf
popt_1.10.orig.tar.gz
cd popt
>CC=/opt/host/armv4l/bin/armv4l-unknown-linux-gcc
./configure --build=i686-pc-linux-gnu --host=arm-unknown-linux
--prefix=/HHARMMX21/applications/minigui-free/nfsroot/
--target=arm-unknown-linux
>make
>make install
这里有两个地方容易出现问题:一是权限问题。Linux下对文件的权限有很严格的设定,因此可能会出现用户没有访问或者建立目录的权限导致无法解压缩。或者是没有权限读写
/HHARMMX21/applications/minigui-free/nfsroot而导致make
install出错。另一个是交叉编译工具链的设置问题,需要通过CC=/opt/host/armv4l/bin/armv4l-unknown-linux-gcc命令来指向正确的交叉编译工具链。这里我是通过分析mg-samples-1.3.1的Makefile文件而得到交叉编译工具链的名称和位置的。
如果上面命令执行无误,则/HHARMMX21/applications/minigui-free/nfsroot/lib/下有libpopt.a,libpopt.la,libpopt.so,libpopt.so.0,libpopt.so.0.0.0等几个文件,在/HHARMMX21/applications/minigui-free/nfsroot/include/下有popt.h文件。
-
编译mde-1.3.0
华恒科技提供的HHARMMX21附带光盘中的mde-1.3.0文件有问题,估计是其开发人员没能解决popt库的问题,所以想通过修改mde-1.3.0下的tools目录下的vcongui.c文件来屏蔽对popt库的调用,结果没有成功,却忘了恢复对mde-1.3.0源代码的修改。因此我们需要编辑vcongui.c文件来去掉对#include
<popt.h>的注释。
cd
/HHARMMX21/applications/minigui-free/mde-1.3.0/tools/
gedit vcongui.c
将第5行由
//#include <popt.h>
改为
#include <popt.h>
也就是去掉对#include
<popt.h>的注释。然后回到mde-1.3.0目录下,执行./HHTECH.compile.mg编译mde.
cd
/HHARMMX21/applications/minigui-free/mde-1.3.0/
./HHTECH.compile.mg
如果执行无误则成功编译了mde-1.3.0,这时可以去bomb,notebook等目录下看一下,应该已经生成了程序的可执行文件。其中mde-1.3.0下的bomb目录包含的是一个扫地雷游戏,挺好玩的。
请别忘了,所有交叉编译出来的程序必须到目标板上才能运行,也就是只能通过MAINet手持终端才能执行,在自己的电脑上是无法执行和查看效果的。