一、移植资源包介绍:
作者:gavinpong,相关源码可以在github仓库下载到,欢迎fork 与 交流:https://github.com/GavinPong
所有组件都可以在minigui官网上下载到:http://www.minigui.com/zhcn/download/
下载miniGUI3.2.0组件
简单介绍一下各个库:
freetype:字体
qvfb2和gvfb::虚拟显存,主要用在pc机上做仿真
jpegsrc:显示jpeg图像时要用到的库
libpng:显示png图像时要用到的库
zlib:PNG压缩算法
libminigui:minigui3.0.12的核心库
minigui-res:minigui3.0.12资源文件,包括字体、图标、位图等
mg-samples:minigui3.0.12例子程序
minigui3.0.12可选组件: libmg3d(3D支持)、libmgi(提供输入接口)、libmgp(提供打印机接口的支持)、 libmgplus(2D矢量图支持和图像加速)、libmgutils(提供一些常用对话框的模板),可以根据自己的需要来使用。
在这里我只安装了freetype,zlib,,jpegsrc,,libpng, libmgplus以及res,主库,和sample。
二、移植编译zlib库:
1、解压zlib-1.2.2.tar.gz;
2、使用configure脚本重新指定Makefile的编译参数:
a、生成动态库指令(会生成对应平台下的Makefile):
CC=arm-hisiv300-linux-gcc CXX=arm-hisiv300-linux-g++ LD=arm-hisiv300-linux-ld AS=arm-hisiv300-linux-as AR=arm-hisiv300-linux-ar ./configure --prefix=/home/share_disk/workspace/thirdlib/zlib --share
b、然后直接 make && make install就能生成新的zlib库
a、生成静态库指令(会生成对应平台下的Makefile):
CC=arm-hisiv300-linux-gcc CXX=arm-hisiv300-linux-g++ LD=arm-hisiv300-linux-ld AS=arm-hisiv300-linux-as AR=arm-hisiv300-linux-ar ./configure --prefix=/home/share_disk/workspace/thirdlib/zlib
b、直行Make会报如下错:
arm-hisiv300-linux-ar:无效选项
Usage: arm-hisiv300-linux-ar [emulation options] [-]{dmpqrstx}[abcDfilMNoPsSTuvV] [--plugin
arm-hisiv300-linux-ar -M [ c、修改Makefile中的如下指令: 在$(AR)后面加上参数 rv即可: ---------------------------------------------------------------------------------------------------------------------------- 修改前 libz.a: $(OBJS) $(OBJA) $(AR) $@ $(OBJS) $(OBJA) -@ ($(RANLIB) $@ || true) >/dev/null 2>&1 ---------------------------------------------------------------------------------------------------------------------------- 修改后 libz.a: $(OBJS) $(OBJA) $(AR) rv $@ $(OBJS) $(OBJA) -@ ($(RANLIB) $@ || true) >/dev/null 2>&1 三、移植编译libpng: 1、解压libpng-1.2.37.tar.gz 2、使用configure脚本重新指定Makefile的编译参数: a、生成动态库指令(会生成对应平台下的Makefile): CC=arm-hisiv300-linux-gcc CXX=arm-hisiv300-linux-g++ LD=arm-hisiv300-linux-ld AS=arm-hisiv300-linux-as AR=arm-hisiv300-linux-ar ./configure --prefix=/home/share_disk/workspace/thirdlib/zlib --enable-shared b、然后直接 make && make install就能生成新的libpng库 a、生成动态库指令(会生成对应平台下的Makefile): CC=arm-hisiv300-linux-gcc CXX=arm-hisiv300-linux-g++ LD=arm-hisiv300-linux-ld AS=arm-hisiv300-linux-as AR=arm-hisiv300-linux-ar ./configure --prefix=/home/share_disk/workspace/thirdlib --build=i386-linux --host=arm-hisiv300-linux --target=arm-hisiv300-linux --enable-shared a、生成静态库指令(会生成对应平台下的Makefile): CC=arm-hisiv300-linux-gcc CXX=arm-hisiv300-linux-g++ LD=arm-hisiv300-linux-ld AS=arm-hisiv300-linux-as AR=arm-hisiv300-linux-ar ./configure --prefix=/home/share_disk/workspace/thirdlib/MiniGui3.012/libpng --build=i386-linux --host=arm-hisiv300-linux --target=arm-hisiv300-linux b、生成Makefile时提示zlib库没有安装: |--configure: error: zlib not installed |--解决办法:将上一步安装的zlib库路径设置到环境变量中即可 export CFLAGS="-I/home/share_disk/workspace/thirdlib/MiniGUI3.0.12/zlib/include" export LDFLAGS="-L/home/share_disk/workspace/thirdlib/MiniGUI3.0.12/zlib/lib" c、执行make指令报版本不匹配错误: |--/bin/ld:libpng.vers:2: syntax error in VERSION script |--解决办法:打开Makefile,将48行的这个编译选项用#屏蔽掉去掉: 48 am__append_1 = #-Wl,--version-script=libpng.vers d、再次执行Make && make install完成编译和安装 四、移植jpeg: 1、解压jpegsrc.v7.tar.gz 2、使用configure脚本重新指定Makefile的编译参数: a、生成动态库指令(会生成对应平台下的Makefile): CC=arm-hisiv300-linux-gcc CXX=arm-hisiv300-linux-g++ LD=arm-hisiv300-linux-ld AS=arm-hisiv300-linux-as ./configure --prefix=/home/share_disk/workspace/thirdlib/jpeg --build=i386-linux --host=arm-hisiv300-linux -target=arm-hisiv300-linux --enable-shared b、然后直接 make && make install就能生成新的zlib库; c、生成静态库指令(会生成对应平台下的Makefile): CC=arm-hisiv300-linux-gcc CXX=arm-hisiv300-linux-g++ LD=arm-hisiv300-linux-ld AS=arm-hisiv300-linux-as ./configure --prefix=/home/share_disk/workspace/thirdlib/jpeg --build=i386-linux --host=arm-hisiv300-linux -target=arm-hisiv300-linux d、然后直接 make && make install就能生成新的jpeg库; 五、编译freetype库: 1、解压freetype-2.3.9-fm20100818.tar.gz 2、使用configure脚本重新指定Makefile的编译参数: |--a、生成动态库指令(会生成对应平台下的Makefile): CC=arm-hisiv300-linux-gcc CXX=arm-hisiv300-linux-g++ LD=arm-hisiv300-linux-ld AS=arm-hisiv300-linux-as ./configure --host=arm-hisiv300-linux --prefix=/home/share_disk/workspace/thirdlib/freetype |-b、生成静态库指令(会生成对应平台下的Makefile): CC=arm-hisiv300-linux-gcc CXX=arm-hisiv300-linux-g++ LD=arm-hisiv300-linux-ld AS=arm-hisiv300-linux-as ./configure --host=arm-hisiv300-linux --prefix=/home/share_disk/workspace/thirdlib/freetype --enable-static |--c、然后直接 make && make install就能生成新的freetype库; 六、安装minigui资源库: 1、解压minigui-res-3.2.0.tar.gz 2、使用configure脚本重新指定Makefile的编译参数: CC=hisiv300-linux-gcc CXX=hisiv300-linux-g++ LD=hisiv300-linux-ld AS=hisiv300-linux-as AR=hisiv300-linux-ar ./configure --prefix=/home/share_disk/workspace/thirdlib/minigui-res 七、编译minigui核心库: 1、解压libminigui-3.2.0.tar.gz 2、使用configure脚本重新指定Makefile的编译参数: |--a、生成动态库指令(会生成对应平台下的Makefile): CC=arm-hisiv300-linux-gcc CPP=arm-hisiv300-linux-cpp LD=arm-hisiv300-linux-ld AR=arm-hisiv300-linux-ar RANLIB=arm-hisiv300-linux-ranlib STRIP=arm-hisiv300-linux-strip ./configure --prefix=/home/share_disk/workspace/thirdlib/minigui-core --build=i386-linux --host=arm-hisiv300-linux --target=arm-hisiv300-linux --disable-screensaver --disable-splash --disable-jpgsupport --enable-shared #--with-osname=linux \ #--with-targetname=fbcon \ #--enable-autoial \ #--disable-vbfsupport \ |--b、生成静态库指令(会生成对应平台下的Makefile): CC=arm-hisiv300-linux-gcc CPP=arm-hisiv300-linux-cpp LD=arm-hisiv300-linux-ld AR=arm-hisiv300-linux-ar RANLIB=arm-hisiv300-linux-ranlib STRIP=arm-hisiv300-linux-strip ./configure --prefix=/home/share_disk/workspace/thirdlib/minigui-core --build=i386-linux --host=arm-hisiv300-linux --target=arm-hisiv300-linux --disable-screensaver --disable-splash --disable-jpgsupport --enable-static #--with-osname=linux \ #--with-targetname=fbcon \ #--enable-autoial \ #--disable-vbfsupport \ |--c、然后直接 make && make install就能生成新的libminigui库; 编译时会报如下错误: make[4]: 正在进入目录 `/home/share_disk/sdk/minigui-3531a/libminigui-3.2.0/src/newgal/pcxvfb' /bin/bash ../../../libtool --mode=compile arm-hisiv300-linux-gcc -DHAVE_CONFIG_H -I. -I../../.. -I/home/share_disk/sdk/minigui-3531a/libminigui-3.2.0/src/include -I/home/share_disk/sdk/minigui-3531a/libminigui-3.2.0/include -I/home/share_disk/sdk/minigui-3531a/libminigui-3.2.0/src/newgal/ -I/usr/include/ -DNDEBUG -I/home/share_disk/workspace/thirdlib/zlib/include -D_WITH_TARGET_NONE -D__MINIGUI_LIB__ -D_GNU_SOURCE -O2 -Wstrict-prototypes -pipe -MT pcxvfb.lo -MD -MP -MF .deps/pcxvfb.Tpo -c -o pcxvfb.lo pcxvfb.c mkdir .libs arm-hisiv300-linux-gcc -DHAVE_CONFIG_H -I. -I../../.. -I/home/share_disk/sdk/minigui-3531a/libminigui-3.2.0/src/include -I/home/share_disk/sdk/minigui-3531a/libminigui-3.2.0/include -I/home/share_disk/sdk/minigui-3531a/libminigui-3.2.0/src/newgal/ -I/usr/include/ -DNDEBUG -I/home/share_disk/workspace/thirdlib/zlib/include -D_WITH_TARGET_NONE -D__MINIGUI_LIB__ -D_GNU_SOURCE -O2 -Wstrict-prototypes -pipe -MT pcxvfb.lo -MD -MP -MF .deps/pcxvfb.Tpo -c pcxvfb.c -fPIC -DPIC -o .libs/pcxvfb.lo In file included from /usr/include/stdlib.h:25:0, from pcxvfb.c:38: /usr/include/features.h:324:26: fatal error: bits/predefs.h: No such file or directory #include 解决方法:根据错误提示,交叉编译时,链接了不该链接的/user/include目录,所以只要在对应目录下的Makefile中去掉不该链接的目录/usr/include/就可以了;进入/src/newgal/pcxvfb目录,修改里面Makefile的298行,将-I/usr/include/用#号屏蔽掉即可 AM_CPPFLAGS = -I$(abs_top_srcdir)/src/include -I$(abs_top_srcdir)/include \ -I$(abs_top_srcdir)/src/newgal/ #-I/usr/include/ 七、编译libmgplus-1.4.0库: 1、解压libmgplus-1.4.0.tar.gz 2、使用configure脚本重新指定Makefile的编译参数: |--a、生成动态库指令(会生成对应平台下的Makefile): CC=arm-hisiv300-linux-gcc CPP=arm-hisiv300-linux-cpp LD=arm-hisiv300-linux-ld AR=arm-hisiv300-linux-ar RANLIB=arm-hisiv300-linux-ranlib STRIP=arm-hisiv300-linux-strip ./configure --prefix=/home/share_disk/workspace/thirdlib/mgplus --build=i386-linux --host=arm-hisiv300-linux --target=arm-hisiv300-linux --enable-shared |--c、生成静态库指令(会生成对应平台下的Makefile): CC=arm-hisiv300-linux-gcc CPP=arm-hisiv300-linux-cpp LD=arm-hisiv300-linux-ld AR=arm-hisiv300-linux-ar RANLIB=arm-hisiv300-linux-ranlib STRIP=arm-hisiv300-linux-strip ./configure --prefix=/home/share_disk/workspace/thirdlib/mgplus --build=i386-linux --host=arm-hisiv300-linux --target=arm-hisiv300-linux --enable-static |--c、然后直接 make && make install就能生成新的libmgplus库; |--报错1:agg_platform_support.cpp:29:28: fatal error: minigui/common.h: No such file or directory #include |--错误1原因:因为libmgplus依赖minigui核心库的minigui/common.h头文件以及lib,所以必须将CPPFLAGS变量里面加上minigui核心库的头文件,如export CPPFLAGS="-I/home/share_disk/workspace/thirdlib/minigui-core/include" |--为什是设置CPPFLAGS环境变量而不是其他变量,原因请参见./configure --help中对CPPFLAGS的说明 |--特别注意:设置CPPFLAGS的操作必须在生成Makefile前,即执行./configure前,否则这个设置将不会更新到已经生成的Makefile中,导致依旧报错; |--报错2:In file included from path.h:51:0, from graphics.cpp:62: ../agg/font_freetype/agg_font_freetype.h:37:22: fatal error: ft2build.h: No such file or directory #include |--错误1原因:因为libmgplus依赖freetype2库的相关头文件和lib,所以必须将CPPFLAGS变量追加上freetype2的头文件路径,如:export CPPFLAGS="-I/home/share_disk/workspace/thirdlib/minigui-core/include -I/home/share_disk/workspace/thirdlib/freetype/include -I/home/share_disk/workspace/thirdlib/freetype/include/freetype2" |--特别注意: |--1、追加路径时不能使用CPPFLAGS=$CPPFLAGS:追加内容,否则依然报错; |--2、freetype2需要同时追加include/和include/freetype2两个路径 ./configure前需要设置的环境变量参数: export CPPFLAGS="-I/home/share_disk/workspace/thirdlib/minigui-core/include" export CPPFLAGS="-I/home/share_disk/workspace/thirdlib/minigui-core/include -I/home/share_disk/workspace/thirdlib/freetype/include -I/home/share_disk/workspace/thirdlib/freetype/include/freetype2" export LDFLAGS="-L/home/share_disk/workspace/thirdlib/minigui-core/lib -L/home/share_disk/workspace/thirdlib/freetype/lib" 八、编译mg-samples-3.0.12: 1、设置环境变量; export CPPFLAGS="-I/home/share_disk/workspace/thirdlib/minigui-core/include -I/home/share_disk/workspace/thirdlib/freetype/include -I/home/share_disk/workspace/thirdlib/freetype/include/freetype2 -I/home/share_disk/workspace/thirdlib/mgplus/include" export CPPFLAGS="-I/home/share_disk/workspace/thirdlib/mgplus/include" 2、使configure生成Makefile: CC=arm-hisiv300-linux-gcc CPP=arm-hisiv300-linux-cpp LD=arm-hisiv300-linux-ld AR=arm-hisiv300-linux-ar RANLIB=arm-hisiv300-linux-ranlib STRIP=arm-hisiv300-linux-strip ./configure --prefix=/home/share_disk/workspace/thirdlib//minigui-sample --build=i386-linux --host=arm-hisiv300-linux --target=arm-hisiv300-linux 3、make编译: |--两个指针逻辑运算使用的是“位或”而不是“逻辑或”,改正成“逻辑或”就好了; |--在这里编译会报一堆错误,这里的错误基本是Sample里面很多源码中没有正确包好对 应的头文件,导致提示很多内容没有定义;还有的就是使用的接口是全部大写,而实 际头文件中年确实大写+小写,一一修改正确就好了; |--解决问题的技巧:使用windows下的在目录下搜索文件名和内容的方法,定位没有定义的变量或接口在库的哪个头文件中,然后添加到对应头文件中即可;