一、使用到第三方库。
1、zlib:zlib是提供数据压缩用的函式库,由Jean-loup Gailly与Mark Adler所开发,初版0.9版在1995年5月1日发表。zlib使用DEFLATE算法,最初是为libpng函式库所写的,后来普遍为许多软件所使用。
2、libpng:这个是用来显示png图形的,MiniGUI里很多图都是png的,如果没有这个库,MiniGUI将无法正常工作。
3、jpeg:用于显示jpeg图像,否则程序不能正常运行。
4、freetype:FreeType库是一个完全免费(开源)的、高质量的且可移植的字体引擎,它提供统一的接口来访问多种字体格式文件,包括TrueType, OpenType, Type1, CID, CFF, Windows FON/FNT, X11 PCF等。支持单色位图、反走样位图的渲染。FreeType库是高度模块化的程序库,虽然它是使用ANSI C开发,但是采用面向对象的思想,因此,FreeType的用户可以灵活地对它进行裁剪。
5、chipmunk:一个开源的2D物理引擎
6、harfbuzz:开源文本整形引擎,和文本相关的库文件
7、gvfb与qvfb2:这两个主要用于pc上仿真,在嵌入式平台上没用,就不做说明。
二、miniGUI的核心库和组件库
1、minigui-res:minigui3.0工具栏所使用的资源集合,包括字体、图标、位图等。
2、libminigui:minigui3.0的核心库。
3、libmgutils:(提供一些常用对话框的模板)
4、libmgplus(2D矢量图支持和图像加速,图形绘制接口的增强)
5、libmgeff (动画框架)
6、libmgncs (新控件集)
7、mgncs4touch(新空间集的有关触摸控件)
8、libmgi(提供输入接口)
三、在NXP平台编译
编译之前运行 source /opt/fsl-imx-fb/4.14-sumo/environment-setup-cortexa7hf-neon-poky-linux-gnueabi
1、编译中zlib库
第一种方法修改Makfile
1)./configure --prefix=/usr/local/nxpminiGUI/ --share
2)修改Makefile文件 CFLAGS= -02 -pipe -g -feliminate-unused-debug-types -DUSE_MMAP
修改为:CFLAGS= -02 -pipe -g -feliminate-unused-debug-types -DUSE_MMAP -fPIC (添加-fPIC)
3)make
4)make install
第二种方法修改configure
1)修改configure CFLAGS="$CFLAGS -DUSE_MMAP" 修改为:CFLAGS="$CFLAGS -DUSE_MMAP -fPIC"
2)./configure --prefix=/usr/local/nxpminiGUI/ --share
3)make
4)make install
//建议采用第二种方法
2、编译png库
1)./configure --prefix=/usr/local/nxpminiGUI/ --host=arm-linux --target=arm-linux
2)make
3)make install
3、编译jpeg库
1)./configure --prefix=/usr/local/nxpminiGUI/ --host=arm-linux --target=arm-linux --enable-shared
2)make
3)make install
4、编译freetype库
1)./configure --prefix=/usr/local/nxpminiGUI/ --host=arm-linux --target=arm-linux --enable-shared
2)make
3)make install
5、编译 chipmunk-5.3.1库
1)./configure --prefix=/usr/local/nxpminiGUI/ --host=arm-linux --target=arm-linux --enable-shared
2)make
3)make install
6、编译harfbuzz库
1)./configure --prefix=/usr/local/nxpminiGUI/ --host=arm-linux --target=arm-linux
2)make
3)make install
编译miniGUI库文件
1、编译minigui-res
1)dos2unix *
2)./autogen.sh
3)./configure --prefix=/usr/local/nxpminiGUI/ --host=arm-linux --target=arm-linux --enable-shared
4)make
5)make install
2、编译minigui
1)修改环境变量,NXP中没有设置头文件和库文件路径,设置环境变量
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/nxpminiGUI/include/freetype2/
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/local/nxpminiGUI/include/freetype2/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/nxpminiGUI/lib/
2)dos2unix *
3)./autogen.sh
4)./configure --enable-develmode --with-runmode=$ths --disable-splash --disable-screensaver --with-ttfsupport=ft2 --with-ft2-includes=/usr/include/freetype2
5)make
会出现以下问题:
1> warning认为是error的问题,去掉Werror, 在./configure.ac 去掉-Werror
2>出现 fatal error: ft2build.h:No such file or directory 原因是没有设置环境变量,如第一所示:
3>出现 include location "/usr/include" is unsafe for cross-compilation[Wpoison-system-directories]
error :impossible constraint in 'asm' ........
解决的方法,在makefile去掉-I/usr/include
修改点:在/minigui/src/newgal/pcxvfb 中Makefile.am 去掉-I/usr/include
修改点:在/minigui/src/newgal/qvfb 中Makefile.am 去掉-I/usr/include
修改点:在/minigui/src/newgal/rtos_xvfb中Makefile.am 去掉-I/usr/include
修改点:在/minigui/src/newgal/gdl 中Makefile.am 去掉-I/usr/include
make clean
./configure --enable-develmode --with-runmode=$ths --disable-splash --disable-screensaver --with-ttfsupport=ft2 --with-ft2-includes=/usr/include/freetype2(如果有问题)
通过以下配置:
./configure --enable-develmode --with-runmode=$ths --disable-splash --disable-screensaver --with-ttfsupport=ft2 --with-ft2-includes=/usr/include/freetype2 --host=arm-linux --target=arm-linux --enable-pcxsupport PKG_CONFIG_PATH=/usr/local/nxpminiGUI/lib/pkgconfig CPPFLAGS=-I/usr/local/nxpminiGUI/include LDFLAGS=-L/usr/local/nxpminiGUI/lib
make
6)make install
3、编译mgutils
1)dos2unix *;./autogen.sh
2)./configure.ac 去掉-Werror
3./configure --prefix=/usr/local/nxpminiGUI/ --host=arm-linux --target=arm-linux --enable-shared --enable-develmode
1>如果不设置环境变量 PKG_CONFIG_PATH=/usr/local/nxpminiGUI/lib/pkgconfig
报错:
checking for MINIGUI... configure: error: Package requirements (minigui >= 3.0.10) were not met:
No package 'minigui' found
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
2>如果不设置环境变量 CPPFLAGS=-I/usr/local/nxpminiGUI/include
会出现error:minigui/common.h:NO such file or directory (当前没有碰到此问题)
4)make
make的时候回出现libminigui_ths.so libjpeg.so libfreetype.so 格式不正确,把先前编译的库拷贝到/usr/local/lib 下面
5)make install
4、编译mgplus
1)dos2unix *;./autogen.sh
2)./configure.ac 去掉-Werror
3)./configure --prefix=/usr/local/nxpminiGUI/ --host=arm-linux --target=arm-linux --enable-shared --enable-develmode PKG_CONFIG_PATH=/usr/local/nxpminiGUI/lib/pkgconfig CPPFLAGS=-I/usr/local/nxpminiGUI/include
4)make
会出现error: ft2build.h:No such file or directory
原因,设置了CPPFLAGS=-I/usr/local/nxpminiGUI/include 找不到include/freetype2 把 freetype2里面的ft2build.h和freetype拷贝到上一级目录
解决了error:minigui/common.h:NO such file or directory 和ft2build.h:No such file or directory的错误
5)make install
5、编译mgeff
1)dos2unix *;./autogen.sh
2)./configure.ac 去掉-Werror
3)./configure --prefix=/usr/local/nxpminiGUI/ --host=arm-linux --target=arm-linux --enable-shared --enable-develmode PKG_CONFIG_PATH=/usr/local/nxpminiGUI/lib/pkgconfig CPPFLAGS=-I/usr/local/nxpminiGUI/include
4)make
会出现error: ft2build.h:No such file or directory
原因,设置了CPPFLAGS=-I/usr/local/nxpminiGUI/include 找不到include/freetype2 把 freetype2里面的ft2build.h和freetype拷贝到上一级目录
解决了error:minigui/common.h:NO such file or directory 和ft2build.h:No such file or directory的错误
会出现libmgplus.so 格式不正确,把先前编译的库拷贝到/usr/local/lib 下面
5)make install
6、编译mgncs
1)dos2unix *;./autogen.sh
2)./configure.ac 去掉-Werror
3)./configure --prefix=/usr/local/nxpminiGUI/ --host=arm-linux --target=arm-linux --enable-shared --enable-develmode PKG_CONFIG_PATH=/usr/local/nxpminiGUI/lib/pkgconfig CPPFLAGS=-I/usr/local/nxpminiGUI/include
4)make
会出现error: ft2build.h:No such file or directory
原因,设置了CPPFLAGS=-I/usr/local/nxpminiGUI/include 找不到include/freetype2 把 freetype2里面的ft2build.h和freetype拷贝到上一级目录
解决了error:minigui/common.h:NO such file or directory 和ft2build.h:No such file or directory的错误
会出现libmgutils.so 格式不正确,把先前编译的库拷贝到/usr/local/lib 下面
5)make install
7、编译mgncs4touch
1)首先编译 chipmunk-5.3.1 harfbuzz库
2)编译png16(以前编译的png12,编译mgncs4touch需要png16)
3)编译mgncs4touch的时候报错(c++库调用不了,问题没有查找到,去掉了sample文件夹),原因是编译sample的时候出现编译不过的问题 修改了configure.ac 里面的sample Makefile.am 里面的sample 文件夹
4)./configure --prefix=/usr/local/nxpminiGUI/ --host=arm-linux --target=arm-linux --enable-shared --enable-develmode PKG_CONFIG_PATH=/usr/local/nxpminiGUI/lib/pkgconfig CPPFLAGS=-I/usr/local/nxpminiGUI/include
5)make;make install
8、编译mgi
1)./configure --prefix=/usr/local/nxpminiGUI/ --host=arm-linux --target=arm-linux --enable-shared --enable-develmode PKG_CONFIG_PATH=/usr/local/nxpminiGUI/lib/pkgconfig CPPFLAGS=-I/usr/local/nxpminiGUI/include LDFLAGS=-L/usr/local/nxpminiGUI/lib
2)make 的时候报错:/usr/local/nxpminiGUI/lib/libharfbuzz.so:undefined reference to 'FT_Done_MM_Var'
/usr/local/nxpminiGUI/lib/libharfbuzz.so:undefined reference to 'FT_Get_Var_Blend_Coordinates'
百度了一下发现它是freetype库的内容,怀疑我的freetype版本太旧,现在freetype-2.10.0.tar
3)编译高版本freetype 报错:./builds/unix/libtool:No such file or directory
安装libtool
编译安装 libtool 还是报错:./builds/unix/libtool:No such file or directory 找到/builds/unix/ 发现没有libtool 只用arm-linux-libtool 修改arm-linux-libtool 为libtool
libtool: link:cannot find the liabrary‘=libpng12.la’ 去点编译example的规则 configure.am/configure.in makefile.am/makefile.in
编译应用程序
1、在编译应用程序的时候报
libminigui_ths.so: undefined reference to 'pci_device_probe'
libminigui_ths.so: undefined reference to 'pci_id_match_iterator_create'
重新编译minigui库文件
等有关的错误,因为当前没有pci的库,修改点修改配置文件configure 里面的_MGHAVE_PCIACCESS 注销$as_echo "#define __MGHAVE_PCIACCESS 1" >>confdefs.h
修改minigui/src/newgal/fbcon/pci_smi.c 里面的#ifdef _MGHAVE_PCIACCESS 修改成#ifdef N_MGHAVE_PCIACCESS(随便起一个名字)
备注:编译根据环境不同和配置不同可能出现的问题不一样,有什么问题大家可以留言讨论