hi-3531a:minigui3.2.0移植

一、移植资源包介绍:

作者: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 ] [member-name] [count] archive-file file...

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下的在目录下搜索文件名和内容的方法,定位没有定义的变量或接口在库的哪个头文件中,然后添加到对应头文件中即可;

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(嵌入式UI,hisi(海思))