MiniGUI v1.3.3在PC上的配置和编译过程(常见问题解决方法)

来源: ChinaUnix博客  日期: 2007.10.15 13:02 (共有0条评论) 我要评论
 

MiniGUI v1.3.3在PC上的配置和编译过程(常见问题解决方法)
这篇文章主要介绍MiniGUI v1.3.3在PC上的配置和编译过程,以及示例程序的编译和运行。
MiniGUI官方网站:
http://www.minigui.com/
http://www.minigui.org/
可以在上面找到各个版本的源码和相关资料,本文用到的源码均可在这个页面中下载到:
http://www.minigui.org/res.shtml
MiniGUI图形库:
libminigui-1.3.3.tar.gz(点击下载)
MiniGUI资源包,里面包含字体、图标等资源:
minigui-res-1.3.tar.gz(点击下载)
MiniGUI v1.3.3示例程序:
mg-samples-1.3.0.tar.gz(点击下载)
另外,我们还需要下载QVFB(Qt Virtual FrameBuffer),它可以在PC上模拟显示屏,方便调试MiniGUI应用程序。
MiniGUI官网上对QVFB进行了打包,可以直接下载:
qvfb-1.0.tar.gz(点击下载)
相关的官方文档均可在以下页面中下载到:
http://www.minigui.com/download/cindex.shtml
《Linux/uClinux + MiniGUI: 嵌入式系统开发原理、工具及过程》:Studying-Embedded-Linux-Using-MiniGUI.pdf
《MiniGUI 用户手册》V1.3.x:MINIGUI-USER-MANUAL-V1.3-1-C.pdf
《MiniGUI 编程指南》V1.3.x:MINIGUI-PROG-GUIDE-V1.3-C.pdf
建议在继续下文之前先大致浏览一下列出的这三篇文档。
(一) 将下载的源码全部解压到一个目录下:
linux:/home/work/minigui # ll
总用量 6150
drwxr-xr-x   2 root root     232 2006-09-26 18:32 .
drwxr-xr-x  10 root root    1096 2006-09-26 17:34 ..
-rw-r--r--   1 root root 2227015 2006-09-26 18:31 libminigui-1.3.3.tar.gz
-rw-r--r--   1 root root  222891 2006-09-26 18:31 mg-samples-1.3.0.tar.gz
-rw-r--r--   1 root root 1425621 2006-09-26 18:31 minigui-res-1.3.3.tar.gz
-rw-r--r--   1 root root 1717567 2006-09-26 18:31 qvfb-1.0.tar.gz
linux:/home/work/minigui # tar -zxf libminigui-1.3.3.tar.gz
linux:/home/work/minigui # tar -zxf mg-samples-1.3.0.tar.gz
linux:/home/work/minigui # tar -zxf minigui-res-1.3.3.tar.gz
linux:/home/work/minigui # tar -zxf qvfb-1.0.tar.gz
(二) 切换到libminigui-1.3.3目录,开始配置并编译:
linux:/home/work/minigui # cd libminigui-1.3.3/
linux:/home/work/minigui/libminigui-1.3.3 # make menuconfig
如果对配置的选项不是很清楚,可以查看文档《Linux/uClinux + MiniGUI: 嵌入式系统开发原理、工具及过程》的附录B部分。
这里保持默认配置,然后退出配置界面并保存设置。
接着执行make进行编译:*** End of MiniGUI configuration.
*** Next, you must run 'make'.
linux:/home/work/minigui/libminigui-1.3.3 # make
make  all-recursive
make[1]: Entering directory `/home/work/minigui/libminigui-1.3.3'
(以下信息略过...)
若使用默认配置,则编译过程会出现一些问题:varbitmap.c:248: error: static declaration of 'var_bitmap_font_ops' follows non-static declaration
varbitmap.h:38: error: previous declaration of 'var_bitmap_font_ops' was here
make[4]: *** [varbitmap.lo] 错误 1
make[4]: Leaving directory `/home/work/minigui/libminigui-1.3.3/src/font'
make[3]: *** [all-recursive] 错误 1
make[3]: Leaving directory `/home/work/minigui/libminigui-1.3.3/src/font'
make[2]: *** [all-recursive] 错误 1
make[2]: Leaving directory `/home/work/minigui/libminigui-1.3.3/src'
make[1]: *** [all-recursive] 错误 1
make[1]: Leaving directory `/home/work/minigui/libminigui-1.3.3'
make: *** [all] 错误 2
重新运行make menuconfig,将“Font options”中的“Var bitmap font”选项去掉即可:  │ │
  • Raw bitmap font         │ │
      │ │ [ ] Var bitmap font         │ │
      │ │
  • Incore font sansserif   │ │
      │ │
  • Incore font courier     │ │
      │ │
  • Incore font symbol      │ │
      │ │
  • Incore font vgas        │ │
      │ │
  • Qt Prerendered Font     │ │
      │ │
  • TrueType font           │ │
      │ │
  • Adobe Type1 font        │ │
    接下来你应该还会碰到一个编译错误,请参看这篇文章解决:
    《MiniGUI在i386下编译失败(grid.c编译出错)》(文章下部带有该篇幅) 编译成功后运行make install进行libminigui库的安装,默认配置下将安装到/usr/local/目录下,可以在make menuconfig中修改“Development environment options”中的“Path prefix”来指定安装目录。如果使用其他目录,则需要注意相关的目录必须添加进环境PATH变量中,否则在编译MiniGUI应用程序时会出现找不到 包含文件等错误信息。
    接着要运行ldconfig加载新生成的链接库,否则将会出现类似找不到“libminigui-1.3.so.3”的错误消息。
    (三) 接着安装MiniGUI的资源包:
    linux:/home/work/minigui/libminigui-1.3.3 # cd ../
    linux:/home/work/minigui # cd minigui-res-1.3.3/
    linux:/home/work/minigui/minigui-res-1.3.3 # make install
    (四) 安装qvfb:
    linux:/home/work/minigui # cd minigui-res-1.3.3/
    linux:/home/work/minigui/minigui-res-1.3.3 # cd ../qvfb-1.0/
    linux:/home/work/minigui/qvfb-1.0 # ./configure
    (略过输出信息...)
    linux:/home/work/minigui/qvfb-1.0 # make
    (略过输出信息...)
    linux:/home/work/minigui/qvfb-1.0 # make install
    (略过输出信息...)
    (五) 安装示例程序:
    linux:/home/work/minigui/qvfb-1.0 # cd ../mg-samples-1.3.1/
    linux:/home/work/minigui/mg-samples-1.3.1 # ./configure
    (略过输出信息...)
    linux:/home/work/minigui/mg-samples-1.3.1 # make
    (略过输出信息...)
    linux:/home/work/minigui/mg-samples-1.3.1 # make install
    (略过输出信息...)
    示例程序将被安装到src目录下。
    (六) 配置qvfb并运行示例程序:
    编辑/usr/local/etc/MiniGUI.cfg,将GAL和IAL引擎均改为qvfb:
         25 [system]
         26 # GAL engine
         27 gal_engine=qvfb
         28
         29 # IAL engine
         30 ial_engine=qvfb
         31
         32 mdev=/dev/mouse
         33 mtype=IMPS2
         34
         35 [fbcon]
         36 defaultmode=1024x768-16bpp
         37
         38 [qvfb]
         39 defaultmode=640x480-16bpp
         40 display=0
         41
    接着运行qvfb &以启动虚拟帧缓冲区:linux:/home/work/minigui/mg-samples-1.3.1 # qvfb &
    这时会出现一个像下面这样的窗口:

    进入File->Configure,修改显示模式与MiniGUI.cfg保持一致,即“640x480-16bpp”。
    接着就可以运行示例程序了,看看两个酷酷:linux:/home/work/minigui/mg-samples-1.3.1 # src/helloworld

    linux:/home/work/minigui/mg-samples-1.3.1 # src/listview


    常见问题:
    1. 启动程序时出错:
    NEWGAL: Set video mode failure.
    GDI: Can not initialize graphics engine!
    InitGUI failure when using /usr/local/etc/MiniGUI.cfg as cfg file.
    Video mode smaller than requested
    原因:qvfb中的显示设置与MiniGUI.cfg中的显示设置不一样所致,修改成一样就可以了。
    2. 启动程序时出错:GAL: Does not find matched engine.
    GDI: Can not get graphics engine information!
    InitGUI failure when using incore resource.
    原因:在配置MiniGUI时没有选择qvfb选项或没有选择需要的位深支持,进入make menuconfig中的“GAL engine options”,选上“Native GAL engine on Linux FrameBuffer console”、“Native GAL engine on Qt Virtual FrameBuffer”和需要的位深模式(如“16BPP FB”)后重新编译即可。
    3. 我自己写了一个程序,但是在编译时提示:linux:/home/work1/app # gcc -o hello hello.c -lpthread -lminigui
    /usr/local/lib/libminigui.so: undefined reference to `CustomizeDesktopMenu'
    /usr/local/lib/libminigui.so: undefined reference to `CustomDesktopCommand'
    collect2: ld returned 1 exit status
    原因:我使用的是MiniGUI-Thread(在make menuconfig中指定),程序中没有包含必须的minigui/dti.c,所以会出错。
    4. /usr/local/lib/libminigui.so: undefined reference to `pthread_kill_other_threads_np'
    原因:删除 MiniGUI 源代码中调用'pthread_kill_other_threads_np'这个函数
    的语句。应该在 src/kernel/init.c 文件中,也可以运行 grep 找一下这个函数。
    5. 运行miniGUI的例子出现以下错误,
    IAL Native Engine: Can not init mouse!
    IAL: Init IAL engine failure.
    DESKTOP: Low level event initialization failure!
    InitGUI failure when using /usr/local/etc/MiniGUI.cfg as cfg file.
    原因:修改/usr/local/etc/MiniGui.cfg文件:
         [system]
         # GAL engine
         gal_engine=qvfb
         # IAL engine
         ial_engine=qvfb
    6. freetype_font_ops问题解决方法:a.把头文件中的extern FONTOPS freetype_font_ops;改为static FONTOPS freetype_font_ops;b.安装freetype-1.3.1

    MiniGUI在i386下编译失败(grid.c编译出错)原本想在i386下用qvbf虚拟FrameBuffer来测试MiniGUI,结果编译时出错。
    可能是gcc版本太高的缘故,幸好问题不是太大:)
    GCC版本:
    # gcc --version
    gcc (GCC) 4.0.2 20050901 (prerelease) (SUSE Linux)
    Copyright (C) 2005 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    MiniGUI用的是libminigui-1.3.3。
    在make menuconfig中“Controls options”部分配置为:
      │ │     
  • Static                 │ │
      │ │     
  • Button                 │ │
      │ │     
  • Simple Edit            │ │
      │ │     
  • Single-Line Edit       │ │
      │ │     
  • Multi-Line Edit        │ │
      │ │     
  • ListBox                │ │
      │ │     
  • ProgressBar            │ │
      │ │     
  • ToolBar                │ │
      │ │     
  • NewToolBar             │ │
      │ │     
  • MenuButton             │ │
      │ │     
  • TrackBar               │ │
      │ │     
  • ComboBox               │ │
      │ │     
  • PropertySheet          │ │
    “Ext library options”部分配置为:  │ │  
  • TreeView control          │ │
      │ │  
  • ListView control          │ │
      │ │  
  • Grid control              │ │
      │ │  
  • MonthCalendar control     │ │
      │ │  
  • SpinBox control           │ │
      │ │  
  • CoolBar control           │ │
      │ │  [ ] Full GIF98a support       │ │
      │ │  [ ] Skin support              │ │
      │ │  [ ] Library of VCOnGUI        │ │
    “Development environment options”开发环境设置:  │ │(Linux) Platform                │ │
      │ │(i386) Compiler                 │ │
      │ │(glibc) Libc                    │ │
      │ │--- Installation options        │ │
      │ │     Path prefix: "/usr/local"  │ │
      │ │--- Additonal Compiler Flags    │ │
      │ │     CFLAGS: ""                 │ │
      │ │     LDFLAGS: ""                │ │
    make时出错如下错误:make[3]: Entering directory `/home/work1/minigui/libminigui-1.3.3/ext/control'
    source='grid.c' object='grid.lo' libtool=yes /
    depfile='.deps/grid.Plo' tmpdepfile='.deps/grid.TPlo' /
    depmode=gcc3 /bin/sh ../../depcomp /
    /bin/sh ../../libtool --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I./ -I../include -I../../include    -D__MINIGUI_LIB__ -D_REENTRANT -O2 -Wall -Wstrict-prototypes -pipe -DNDEBUG -c -o grid.lo `test -f 'grid.c' || echo './'`grid.c
    rm -f .libs/grid.lo
    gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I./ -I../include -I../../include -D__MINIGUI_LIB__ -D_REENTRANT -O2 -Wall -Wstrict-prototypes -pipe -DNDEBUG -c grid.c -MT grid.lo -MD -MP -MF .deps/grid.TPlo  -fPIC -DPIC -o .libs/grid.lo
    grid.c: In function 'AddCol':
    grid.c:626: error: invalid lvalue in assignment
    grid.c:627: error: invalid lvalue in assignment
    grid.c:638: error: invalid lvalue in assignment
    grid.c:639: error: invalid lvalue in assignment
    grid.c:667: error: invalid lvalue in assignment
    grid.c:668: error: invalid lvalue in assignment
    grid.c:680: error: invalid lvalue in assignment
    grid.c:681: error: invalid lvalue in assignment
    grid.c: In function 'AddRow':
    grid.c:733: error: invalid lvalue in assignment
    grid.c:734: error: invalid lvalue in assignment
    grid.c:745: error: invalid lvalue in assignment
    grid.c:746: error: invalid lvalue in assignment
    grid.c:774: error: invalid lvalue in assignment
    grid.c:775: error: invalid lvalue in assignment
    grid.c:788: error: invalid lvalue in assignment
    grid.c:789: error: invalid lvalue in assignment
    make[3]: *** [grid.lo] 错误 1
    make[3]: Leaving directory `/home/work1/minigui/libminigui-1.3.3/ext/control'
    make[2]: *** [all-recursive] 错误 1
    make[2]: Leaving directory `/home/work1/minigui/libminigui-1.3.3/ext'
    make[1]: *** [all-recursive] 错误 1
    make[1]: Leaving directory `/home/work1/minigui/libminigui-1.3.3'
    make: *** [all] 错误 2
    出错文件是位于ext/control/下的grid.c,可能是编译器版本太高了,才会出现这样的错误。
    解决方法:
    将grid.c中所有类似这样的代码:
          (PGRIDCOLHDR)pCell1->pRowHdr = pRowHdr;
          (PGRIDCOLHDR)pCell1->pColHdr = pCol1;
    将前面的强制类型转换去掉就可以编译通过了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值