项目中的界面使用MiniGUI绘制,MiniGUI各个库均使用的是官网上的最新版本。核心库版本号为libminigui-gpl-3.0.12,freetype库版本号为2.3.9。
在本地模拟器上使用,只需要make ,make install就可以了。移植到开发板上,需要修改configure文件,使用arm-linux-gcc编译。
最开始使用的是MiniGUI默认的RBF,VBF这些字体。在使用过程中发现MiniGUI中这些字库文件只有12,24号等这些特定的字库。想要修改字体大小必须去做字库文件。当然也可以对字体进行缩放处理,但是这样的话字体的显示效果不佳。发现其实MiniGUI支持矢量字体,只需要在核心库中添加freetype库支持就可以了。在本地模块器上马上就可以使用矢量字体了。但是在交叉编译的核心库中添加freetype支持时出问题了。在libminigui-gpl-3.0.12中执行./configure --prefix=/usr/local/arm --host=arm-linux --target=arm-linux --build=i386-linux --with-osname=linux --with-targetname=fbcon --enable-autoial --disable-vbfsupport --enable-screensaver=no --enable-splash=no --enable-ttfcache --with-ttfsupport=ft2
checking build system type... i386-pc-linux-gnu checking host system type... arm-unknown-linux-gnu checking target system type... arm-unknown-linux-gnu checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for arm-linux-strip... arm-linux-strip checking for a thread-safe mkdir -p... /bin/mkdir -p checking for gawk... no checking for mawk... mawk checking whether make sets $(MAKE)... yes checking for style of include used by make... GNU checking for arm-linux-gcc... arm-linux-gcc checking whether the C compiler works... yes checking for C compiler default output file name... a.out checking for suffix of executables... checking whether we are cross compiling... yes checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether arm-linux-gcc accepts -g... yes checking for arm-linux-gcc option to accept ISO C89... none needed checking dependency style of arm-linux-gcc... gcc3 checking for ld used by GCC... arm-linux-ld checking if the linker (arm-linux-ld) is GNU ld... yes checking for arm-linux-ld option to reload object files... -r checking for BSD-compatible nm... /home/yyh/workspace/toolchain/pnx8181/bin/arm-linux-nm -B checking for a sed that does not truncate output... /bin/sed checking whether ln -s works... yes checking how to recognise dependent libraries... file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib ) checking command to parse /home/yyh/workspace/toolchain/pnx8181/bin/arm-linux-nm -B output... ok checking how to run the C preprocessor... arm-linux-gcc -E checking for grep that handles long lines and -e... /bin/grep checking for egrep... /bin/grep -E checking for ANSI C header files... yes checking for sys/types.h... yes checking for sys/stat.h... yes checking for stdlib.h... yes checking for string.h... yes checking for memory.h... yes checking for strings.h... yes checking for inttypes.h... yes checking for stdint.h... yes checking for unistd.h... yes checking dlfcn.h usability... yes checking dlfcn.h presence... yes checking for dlfcn.h... yes checking for arm-linux-file... no checking for file... /usr/bin/file checking for arm-linux-ranlib... arm-linux-ranlib checking for arm-linux-strip... (cached) arm-linux-strip checking for objdir... .libs checking for arm-linux-gcc option to produce PIC... -fPIC checking if arm-linux-gcc PIC flag -fPIC works... yes checking if arm-linux-gcc static flag -static works... yes checking if arm-linux-gcc supports -c -o file.o... yes checking if arm-linux-gcc supports -c -o file.lo... yes checking if arm-linux-gcc supports -fno-rtti -fno-exceptions... no checking whether the linker (arm-linux-ld) supports shared libraries... yes checking how to hardcode library paths into programs... immediate checking whether stripping libraries is possible... yes checking dynamic linker characteristics... GNU/Linux ld.so checking if libtool supports shared libraries... yes checking whether to build shared libraries... yes checking whether to build static libraries... yes checking whether -lc should be explicitly linked in... no creating libtool checking for arm-linux-gcc... (cached) arm-linux-gcc checking whether we are using the GNU C compiler... (cached) yes checking whether arm-linux-gcc accepts -g... (cached) yes checking for arm-linux-gcc option to accept ISO C89... (cached) none needed checking dependency style of arm-linux-gcc... (cached) gcc3 checking for ld used by GCC... (cached) arm-linux-ld checking if the linker (arm-linux-ld) is GNU ld... (cached) yes checking for arm-linux-ranlib... (cached) arm-linux-ranlib checking whether ln -s works... yes checking whether make sets $(MAKE)... (cached) yes checking for ANSI C header files... (cached) yes checking for dirent.h that defines DIR... yes checking for library containing opendir... none required checking for sys/types.h... (cached) yes checking sys/time.h usability... yes checking sys/time.h presence... yes checking for sys/time.h... yes checking termio.h usability... yes checking termio.h presence... yes checking for termio.h... yes checking for unistd.h... (cached) yes checking math.h usability... yes checking math.h presence... yes checking for math.h... yes checking locale.h usability... yes checking locale.h presence... yes checking for locale.h... yes checking for an ANSI C-conforming const... yes checking for inline... inline checking for size_t... yes checking whether time.h and sys/time.h may both be included... yes checking whether struct tm is in sys/time.h or time.h... time.h checking for working alloca.h... yes checking for alloca... yes checking for working memcmp... no checking for stdlib.h... (cached) yes checking for unistd.h... (cached) yes checking for sys/param.h... yes checking for getpagesize... yes checking for working mmap... no checking for vprintf... yes checking for _doprnt... no checking for time... yes checking for mktime... yes checking for localtime... yes checking for strdup... yes checking for strcasecmp... yes checking for strncasecmp... yes checking for strerror... yes checking for setlocale... yes checking for getpt... yes checking for FT_Library_Version in -lfreetype... no checking for FrameBuffer console support... yes checking for pci_system_init in -lpciaccess... no checking for pthread library... yes checking for jpeg_std_error in -ljpeg... yes checking for png_check_sig in -lpng... yes checking for pow in -lm... yes configure: creating ./config.status config.status: creating minigui.pc config.status: creating Makefile config.status: creating cmake/Makefile config.status: creating src/Makefile config.status: creating src/control/Makefile config.status: creating src/ex_ctrl/Makefile config.status: creating src/font/Makefile config.status: creating src/font/in-core/Makefile config.status: creating src/newgal/Makefile config.status: creating src/newgal/fbcon/Makefile config.status: creating src/newgal/qvfb/Makefile config.status: creating src/newgal/pcxvfb/Makefile config.status: creating src/newgal/wvfb/Makefile config.status: creating src/newgal/commlcd/Makefile config.status: creating src/newgal/shadow/Makefile config.status: creating src/newgal/mlshadow/Makefile config.status: creating src/newgal/em86gfx/Makefile config.status: creating src/newgal/em85xxyuv/Makefile config.status: creating src/newgal/em85xxosd/Makefile config.status: creating src/newgal/dummy/Makefile config.status: creating src/newgal/svpxxosd/Makefile config.status: creating src/newgal/bf533/Makefile config.status: creating src/newgal/mb93493/Makefile config.status: creating src/newgal/utpmc/Makefile config.status: creating src/newgal/dfb/Makefile config.status: creating src/newgal/hisi/Makefile config.status: creating src/newgal/rtos_xvfb/Makefile config.status: creating src/newgal/nexus/Makefile config.status: creating src/newgal/s3c6410/Makefile config.status: creating src/newgal/sigma8654/Makefile config.status: creating src/newgal/mstar/Makefile config.status: creating src/newgal/gdl/Makefile config.status: creating src/newgal/stgfb/Makefile config.status: creating src/ial/Makefile config.status: creating src/ial/native/Makefile config.status: creating src/ial/netial/Makefile config.status: creating src/ial/nexusial/Makefile config.status: creating src/ial/dlcustom/Makefile config.status: creating src/mybmp/Makefile config.status: creating src/newgdi/Makefile config.status: creating src/gui/Makefile config.status: creating src/libc/Makefile config.status: creating src/misc/Makefile config.status: creating src/main/Makefile config.status: creating src/kernel/Makefile config.status: creating src/server/Makefile config.status: creating src/client/Makefile config.status: creating src/standalone/Makefile config.status: creating src/sysres/Makefile config.status: creating src/sysres/bmp/Makefile config.status: creating src/sysres/icon/Makefile config.status: creating src/sysres/font/Makefile config.status: creating src/sysres/cursor/Makefile config.status: creating src/sysres/license/Makefile config.status: creating src/sysres/license/c_files/Makefile config.status: creating src/include/Makefile config.status: creating src/textedit/Makefile config.status: creating include/Makefile config.status: creating include/ctrl/Makefile config.status: creating rtos/Makefile config.status: creating etc/Makefile config.status: creating 3rd-party/Makefile config.status: creating 3rd-party/scripteasy/Makefile config.status: creating m4/Makefile config.status: creating build/Makefile config.status: creating mgconfig.h config.status: mgconfig.h is unchanged config.status: executing depfiles commands Going to generate license pictures ... ./configure: line 15537: ./runme.sh: No such file or directory WARNING: failed to generate license pictures.
上面红色加粗的这行显示检测本地的freetype库版本失败。估计是检测到了PC上直接编译的freetype库,而不是交叉编译的freetype库。vi mgconfig.h可以看到MiniGUI中矢量字体有关的宏定义没有打开。http://hi.baidu.com/kkernel/item/2da7f329700e45fd51fd874c这篇文章中提到了类似的问题,configure中很多检测项其实只是例行检测而已,我们只需要让这个检查通过,打开与freetype相关的宏定义开关就可以了。
1.echo ac_cv_lib_freetype_FT_Library_Version=yes>arm-linux.cache 2../configure --cache-file=arm-linux.cache
类似的,将版本检测结果写入arm-linux-cache,再执行configure指令,进行交叉编译,搞定。