专栏首页独行猫a的沉淀积累总结不得不说,minigui真的很坑

不得不说,minigui真的很坑

开发项目在嵌入式平台上使用MiniGui作为用户界面开发工具,在工作之余准备在ubuntu14.04上搭建一个测试环境,这样代码测试起来比较方便。

前前后后搞了好多天,遇到了很多麻烦,但是最后还是跑通了。作为一个之前对minigui完全不懂的小白来说,真的需要好好摸索。

总结一下:minigui真的很坑!如果不是项目必须的东西,我建议读者,能不用就不用。

问题:

  • minigui官方提供的依赖库已经是好多年前的,在移植过程中很容易出现安装错误,亲测!
  • 据说官方貌似不再维护了。所以即使遇到bug,估计也不好解决。

搭建开发环境

系统:ubuntu-14.04.3 i686 编译器:gcc-4.8.4, GNU Make 3.81 MiniGui资源下载:MiniGui官网 MiniGui库版本: 3.0.12 资源文件:

minigui-res-be-3.0.12.tar.gz libminigui-gpl-3.0.12.tar.gz libmgplus-1.2.4.tar.gz mg-samples-3.0.12.tar.gz

编译安装MiniGui

安装资源文件

解压资源文件,进入minigui-res-be-3.0.12目录

$ ./configure –prefix=/home/test/install/minigui/ $ make && make install

解压资源文件

进入libminigui-gpl-3.0.12目录

$ ./configure –prefix=/home/test/install/minigui –enable-qvfbial=yes –enable-videoqvfb=yes $ make

错误:png.c:28:17: fatal error: png.h: No such file or directory 解决:sudo apt-get install libpng12-dev

$ make install

安装完成后查看安装目录

$ ls minigui/ etc include lib share

安装完成后,在指定目录~/install/minigui下,生成了etc include lib share四个文件夹,分别放置了配置文件、头文件、库文件和资源文件,在实际开发时,需要用到这些文件。

安装minigui库和头文件

解压资源文件,进入libmgplus-1.2.4目录,配置:

./configure –prefix=/home/test/install/minigui PKG_CONFIG_PATH=/home/test/install/minigui/lib/pkgconfig CPPFLAGS=-I/home/test/install/minigui/include

错误:agg_platform_support.cpp:30:28: fatal error: minigui/common.h: No such file or directory 解决:设置minigui头文件目录,CPPFLAGS=-I/home/test/install/minigui/include

执行 $ make && make install

编译sample文件

解压资源文件,进入mg-samples-3.0.12目录

./configure –prefix=/home/test/install/minigui PKG_CONFIG_PATH=/home/test/install/minigui/lib/pkgconfig CPPFLAGS=-I/home/test/install/minigui/include

运行make命令进行编译。 错误:dlgdemo.c:40:27: fatal error: mgplus/mgplus.h: 没有那个文件或目录 解决:设置libmgplus头文件目录,CPPFLAGS=-I/home/test/install/minigui/include 提示:No package ‘minigui’ found — 运行configure时增加

PKG_CONFIG_PATH=~/install/minigui/lib/pkgconfig

提示:error: minigui/common.h, 运行configure是增加

CPPFLAGS=-I~/install/minigui/include

修改配置文件

在安装目录的etc目录下生产了minigui所需的配置文件MiniGUI.cfg,将该文件拷贝到/etc目录下,并修改部分配置信息。

[system]
# GAL engine and default options
#gal_engine=pc_xvfb
gal_engine=qvfb
defaultmode=800x600-16bpp

# IAL engine
#ial_engine=pc_xvfb
ial_engine=qvfb
mdev=/dev/input/mice
mtype=IMPS2
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

将默认配置修改为使用qvfb模拟器,配置资源文件目录:

cursorpath=/home/test/install/minigui/share/minigui/res/cursor/ respath=/home/test/install/minigui/share/minigui/res/

将光标目录和源目录值修改为实际的安装目录,保存退出。

安装qvfb模拟器

参考:MiniGui开发:Ubuntu14.04环境安装qvfb工具

测试

搭建测试环境,创建目录helloworld include lib,将安装目录下的头文件和静态库文件拷贝过来。

$ tree ├── helloworld │ ├── helloworld.c │ ├── helloworld_res_cn.h │ ├── helloworld_res_en.h │ ├── helloworld_res_tw.h │ └── Makefile ├── include │ ├── mgplus │ └── minigui └── lib ├── libmgplus.a └── libminigui_ths.a

编写Makefile:

# Makefile for minigui test 
# author    hancq
# date      2016-09-30
PRO_NAME=helloworld
MINIGUI_DIR=/home/test/share/workspace/test/minigui

CFLAGS += -I.
CFLAGS += -I$(MINIGUI_DIR)/include
LDFLAGS += -lmgplus -lminigui_ths -lpthread -lm -ldl -lpng -ljpeg -L$(MINIGUI_DIR)/lib

.PHONY:all clean

all:$(PRO_NAME)

$(PRO_NAME):$(PRO_NAME).o
    gcc $(CFLAGS) $(PRO_NAME).o -o $@ $(LDFLAGS)

%.o:%.c
    gcc $(CFLAGS) -c $^ -o $@

clean:
    -rm -rf $(PRO_NAME) *.o
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

将MiniGui的sample中src目录的helloworld相关的文件拷贝到helloword目录下

$ ls helloworld* helloworld.c helloworld_res_cn.h helloworld_res_en.h helloworld_res_tw.h

运行make命令编译生成helloworld可执行文件,先执行在后台把qvfb进行运行起来,在执行./helloworld,此时在模拟器中可以正常运行起来了。

测试成功。

其它错误:

错误:./helloworld: error while loading shared libraries: libminigui_ths-3.0.so.12: cannot open shared object file: No such file or directory 解决:编译找不到库文件,需要在编译选项中增加库和库文件路径

错误:KERNEL>InitGUI (step 4): Can not start client (Please run mginit first)! 解决:运行的是客户端版的进程程序,需要先运行服务器mginit。

错误:KERNEL>InitGUI: Count not init mouse cursor! KERNEL>InitGUI: Init failure, please check your MiniGUI configuration or resource. 解决:找不到资源,修改MiniGui配置文件中资源文件目录。

ar zxvf qvfb2-2.0.tar.gz

进入目录,配置

./configure

出现如下错误:

configure: error: Qt (>= Qt 3.2 and < 4.0) (library qt-mt) not found. 解决: sudo apt-get install libqt3-mt-dev libqt3-headers ./configure –with-qt-includes=/usr/include/qt3 –with-qt-lilbraries=/usr/lib/qt3 Can’t find X includes. Please check your installation and add the correct paths! 解决: sudo apt-get install xorg-dev mgplus/mgplus.h: No such file or directory #include mgplus/mgplus.h 解决: 注释掉此头文件 error: C++ preprocessor “/lib/cpp” fails sanity check See `config.log’ for more details. 解决: sudo apt-get install build-essential

没有错误后,

make

sudo make install

tar zxvf minigui-res-be-3.0.12.tar.gz

./configure

sudo make install
tar zxvf  libminigui-gpl-3.0.12.tar.gz

./configure

make

sudo make install

在/etc/ld.so.conf.d新建一个文件minigui.conf,在其中输入/usr/local/lib

然后刷新动态库:

sudo ldconfig
tar zxvf  libmgplus-1.2.4.tar.gz

./configure  

make

sudo make install
tar zxvf  libmgi-2.0.4.tar.gz

./configure 

make

sudo make install
tar zxvf  libmg3d-1.0.2.tar.gz

./configure  

make

sudo make install
tar zxvf  libmgutils-1.0.4.tar.gz

 ./configure 

make

sudo make install
tar zxvf  libmgp-1.2.2.tar.gz

 ./configure 

make

sudo make install
tar zxvf  libmgncs-1.0.8.tar.gz

 ./configure 

make

sudo make install
tar zxvf mg-samples-3.0.12.tar.gz

./configure 

make

最后,运行minigui sample

修改MiniGUI.cfg( /usr/local/etc/MiniGUI.cfg): 将第44行的gvfb改为qvfb2

运行demo程序

./mg-samples-3.0.12/same/same

start-qvfb :/usr/local/bin/qvfb2 pcxvfb 13997 XVFB-for-MiniGUI-3.0-(Gtk-Version) 800x600-16bpp

成功!

Ubuntu编译minigui

原创 2016年07月20日 20:10:09

  • 标签:
  • minigui
  • 282

ubuntu编译minigui 3.0.12出现下面错误: object.h:275:9: error: incompatible types when assigning to type ‘va_list’ from type ‘struct __va_list_tag *’ 网上搜索了下说是编译系统是64位导致的,换为32位就可以了。但是我的编译系统无法换,看了下,直接在对应的makefile里面修改把该模块编译为32位。如下: CFLAGS = -m32 -g -O2 在CFLAGS上加上-m32就可以了。 (这个最好用32位的系统来编译,不然所有makefile都要修改,比较麻烦) 复习: 复习一下GCC命令行参数,看看各个版本的区别—— 32位版:加上 -m32 参数,生成32位的代码。 64位版:加上 -m64 参数,生成64位的代码。 debug版:加上 -g 参数,生成调试信息。 release版:加上 -static 参数,进行静态链接,使程序不再依赖动态库。加上 -O3 参数,进行最快速度优化。加上-DNDEBUG参数,定义NDEBUG宏,屏蔽断言。

  当没有-m32或-m64参数时,一般情况下会生成跟操作系统位数一致的代码,但某些编译器存在例外,例如—— 32位Linux下的GCC,默认是编译为32位代码。 64位Linux下的GCC,默认是编译为64位代码。 Window系统下的MinGW,总是编译为32位代码。因为MinGW只支持32位代码。 Window系统下的MinGW-w64(例如安装了TDM-GCC,选择MinGW-w64),默认是编译为64位代码,包括在32位的Windows系统下。

后面回来解决这个问题: 我Ubuntu14.04是64位的: uname -a Linux 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux 步骤:

Ubuntu 64bit兼容32bit GCC 交叉编译环境搭建 方法一:

(1)sudo apt-get install lib32z1

(2)sudo apt-get install lib32stdc++6

方法二(时间较长):

(1)sudo apt-get update

(2)sudo apt-get dist-upgrade

(3)sudo apt-get install ia32-libs

下面安装:

sudo apt-get install libc6-dev-i386 lib32ncurses5-dev … # whatever 32-bit libraries 
export LDFLAGS='-m32 -L/usr/lib32'
export CFLAGS='-m32'
export CXXFLAGS='-m32'
./configure …
  • 1
  • 2
  • 3
  • 4
  • 5

make后面会发现下面的错误: i386:x86-64 architecture of input file `/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crti.o’ is incompatible with i386 output

然后修改libminigui-gpl-3.0.12下面的libtool文件里面的: CC=”gcc -m32”

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ucgui在嵌入式linux下的移植

    前几天在研究minigui,照着官方的步骤编译,竟然一堆错,不是缺这库,就是缺那库。好不容易快到了最后一步,竟然再链接时告诉我用的64位系统不兼容32位的min...

    杨永贞
  • minigui 3.2.0:基于miniStudio应用TrueType字体的过程(1)

    版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net...

    用户1148648
  • minigui 3.2.0:基于miniStudio应用TrueType字体的过程(2)-字体边缘锯齿,字库剪裁

    版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net/10km/article/details/811...

    用户1148648
  • minigui 3.2.0:通过环境变量修改minigui的运行参数

    版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net...

    用户1148648
  • “蹲坑神器”与它背后男人们不得不说的故事

    比如在你心急如焚赶着开会想去卫生间时,里面那位可能在美滋滋卷头发、抹口红;你快下班想要去卫生间时,他可能坐在马桶上借上厕所之名狂打游戏。

    昱良
  • Python 与 Excel 不得不说的事

    数据处理是 Python 的一大应用场景,而 Excel 则是最流行的数据处理软件。因此用 Python 进行数据相关的工作时,难免要和 Excel 打交道。 ...

    Crossin先生
  • Moloch 那些不得不说的事

    谈及 Moloch, 想必大家都知道” moloch 是一个开源的、大规模的 IPv4 数据包捕获(PCAP),索引数据库系统。“ 它以标准 pcap 格式存储...

    信安之路
  • 盘点嵌入式那些常见的GUI:emWin、TouchGFX、MiniGUI、Qt等

    现在,MCU资源增多,处理能力也强了,同时市场需求也增多了,GUI功能也越来越丰富了。

    Mculover666
  • 8 个不得不说的 MySQL 陷阱

    Mysql安装简单,速度较快,功能丰富。另外它还是开源运动的标杆,它的伟大成就向我们展示了一个成功的公司是可以建立在开源代码之上的。 然而用过mysql的人都曾...

    wangxl
  • AngularJS7那些不得不说的事故

      最近简直要忙死,所以停更了很久,你们会不会以为我人间蒸发了?   正文之前,请允许我先跑个题,就是关于忙的问题。   做了Freelance,每天过的比...

    俺踏月色而来
  • asList和ArrayList不得不说的故事

    提到集合类,ArrayList应该是用到的非常多的类了。这里的ArrayList是java.util.ArrayList,通常我们怎么创建ArrayList呢?

    程序那些事
  • asList和ArrayList不得不说的故事

    提到集合类,ArrayList应该是用到的非常多的类了。这里的ArrayList是java.util.ArrayList,通常我们怎么创建ArrayList呢?

    子润先生
  • error: include location "/usr/include/" is unsafe for cross-compilation

    如果不做交叉编译,host指定为当前机器的架构(x86_64-linux-gnu)则编译正常 如果设置为mips-linux-gnu进行交叉编译,就报错了:

    用户1148648
  • Hive中苦笑不得的坑

    大家都知道,hive -f 后面指定的是一个文件,然后文件里面直接写sql,就可以运行hive的sql,hive -e 后面是直接用双引号拼接hivesql,然...

    DataScience
  • minigui 3.2.0:mgncs剪裁遇到的问题error

    版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net...

    用户1148648
  • CSS魔法堂:不得不说的Containing Block

    前言 《CSS魔法堂:重新认识Box Model、IFC、BFC和Collapsing margins》中提到在没有floated兄弟盒子时,line box...

    ^_^肥仔John
  • 我与SM不得不说的故事(一)

    逍遥剑客
  • minigui 3.2.0:直接访问framebuffer的方法及示例

    在做嵌入式应用程序开发时,有的场景下因为要追求图像显示效率,需要直接访问Frame Buffer,比如更流畅的视频显示。基于minigui框架的应用程序该如何访...

    用户1148648
  • 关于PHP流不得不说的那些事

    相信不少PHP开发者或多或少都见过类似于 "php://input" 或者 "php://output" 这样的内容,很多人都知道这两个的作用一个是接收的 PO...

    硬核项目经理

扫码关注云+社区

领取腾讯云代金券