一、移植资源包介绍:
作者: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 <name>] [member-name] [count] archive-file file...
arm-hisiv300-linux-ar -M [<mri-脚本]
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 <bits/predefs.h>
解决方法:根据错误提示,交叉编译时,链接了不该链接的/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 <minigui/common.h>
|--错误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 <ft2build.h>
|--错误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下的在目录下搜索文件名和内容的方法,定位没有定义的变量或接口在库的哪个头文件中,然后添加到对应头文件中即可;