miniGUI 3.0.12开发环境搭建
想到哪写到哪吧!后续有时间会再整理。
开发环境:
Ubuntu12.04
minigui3.0.12
搭建过程比较通过,有很多依赖库要搭建,而且官网上已经发出公告3.2版本之下的不再提供依赖库的维护。今年新发布的最新版本是5.0,版本太高不敢用,一是怕不稳定,二是项目里用的还是2.4.x。
如果只是用来学习一下,还是上3.2或者4.0吧!
因为是在公司电脑上,系统是win10,而且因为信息安全还限网搭环境是真的很麻烦,有的时候还得碰运气。因为用的miniGUI的版本较老,稳妥考虑选择了当时相对主流的linux系统。如果是3.2可以用ubuntu14或者16,相对来说比12要好用一些。
win10安装linux虚拟机用的最多的还是vmware。最开始用的是player,正版免费体量小,但是莫名其妙的安装不了tools。没办法在主机和虚拟机之间互换文件,无奈弃置转而安装vmware workstations,我说正版有人信吗?安装了tools后可以互传文件。
需要准备的minigui文件资源有:
工具及依赖库文件:
qvfb2-2.0.tar.gz
zlib-1.2.2.tar.gz
libpng-1.2.37.tar.gz
jpegsrc.v7.tar.gz
freetype-2.3.9-fm20100818.tar.gz
minigui文件
libminigui-gpl-3.0.12.tar.gz
minigui-res-be-3.0.12.tar.gz
mg-samples-3.0.12.tar.gz
minigui组件文件
libmgi-2.0.4.tar.gz
libmgplus-1.2.4.tar.gz
libmg3d-1.0.2.tar.gz
libmgutils-1.0.4.tar.gz
libmgp-1.2.2.tar.gz
libmgncs-1.0.8.tar.gz
官网上对每个资源文件都有简略的介绍,其中较为重要的有png,jpeg,zlib等依赖库,freetype是字体的依赖库,qvfb2是一个QT仿真器(具体我也不了解,而且安装过程也是挺麻烦的),minigui-res-be-3.0.12.tar.gz是用到的一些资源文件,
libminigui-gpl-3.0.12.tar.gz(libminigui-3.0.12.tar.gz)是最重要的核心库文件。一般有了这些就够用了。如果想要跑mg-samples-3.0.12.tar.gz中的样例代码可能还需要其他的一些依赖库和那堆组件。
大多数组件和依赖库的安装只需要用到以下流程,建议在root用户下的终端进行操作:
#tar -zxvf xxx.tar.gz
#./configure(一般采用默认配置即可,如果是跨平台或在特殊的嵌入式板子上部署需要自行配置各种参数)
#make
#make install(不在root用户下需使用 sudo make install)
安装qvfb2的时候,./configure可能会失败提示缺少各种依赖库,缺哪个就安装哪个,使用以下命令:
#sudo apt-get install xxx
如果虚拟机无法联网或者apt-get下载慢或卡死,自行百度解决方法。
另外,如果出现这个错误
checking for Qt... configure: error: Qt (>= Qt 3.0.3) (headers and libraries) not found. Please check your installation!
For more details about this problem, look at the end of config.log.
Qvfb2需要qt3支持,需要安装libqt3-mt-dev libqt3-mt
安装libqt3-mt-dev libqt3-mt
#sudo apt-get install libqt3-mt-dev libqt3-mt
#./configure --with-qt-includes=/usr/share/qt3/include/ --with-qt-libraries=/usr/share/qt3/lib
然后make即可。
在解压安装了libminigui-3.0.12.tar.gz后
在/etc/ld.so.conf.d修改或新建一个文件minigui.conf,在其中新起一行输入/usr/local/lib ,这是告诉minigui去找之前安装的各种库文件的,然后记得刷新动态库:
#sudo ldconfig
最后,或者直接运行之前解压的mg-samples-3.0.12.tar.gz目录下的样例可执行文件,或者自己写个带界面的helloworld程序(程序可参见miniGUI编程指南)。最后编译运行,看见成功。。。个鬼,估计八成还会有这个提示:
execlp error!!
execl: No such file or directory
NEWGAL>PCXVFB: Wait too long for CLIENT.
NEWGAL: Does not find matched engine: pc_xvfb.
KERNEL>InitGUI: Can not get graphics engine information!
解决:
修改MiniGUI.cfg配置文件中以下这段,其实就是修改一下仿真器的指向,如果成功地安装了gvfb估计不会报错也不用修改。
[system]
# GAL engine and default options
gal_engine=pc_xvfb
defaultmode=800x600-16bpp
...
...
...
#{{ifdef _MGGAL_PCXVFB
[pc_xvfb]
defaultmode=800x600-16bpp
window_caption=XVFB-for-MiniGUI-3.0-(Gtk-Version)
exec_file=/usr/local/bin/qvfb2 //修改这里,指向qvfb2的路径,如果不是安装默认安装的改为实际安装的路径。
#}}
之后运行样例基本就没问题了,基本搭建完毕。如果是自己写程序编译运行还会有一些小坑,应该不会都能遇到但是还是记录一下。编译的时候动态库的链接顺序是有说道的,虽然原理我也没搞清,
但是安装《miniGUI编程指南》中用Thread模式编译确实会报错。
/usr/local/lib/libminigui_ths.so: undefined reference to 'pthread_xxx'
/usr/local/lib/libminigui_ths.so: undefined reference to 'sem_xxx'
在调用动态库的时候找不到pthread库中的某些函数,因此报错函数无定义。先确认自己是不是安装了pthread,用man指令查看一下。例如,man 3 pthread_create。没安装就用apt-get install安装相应的库。
安装后还是不行那就有可能是我遇到的问题了:
gcc/g++链接时.o文件以及库的顺序问题
百度可以直接搜索这个解答,我没时间细看直接调整一下编译命令里的链接顺序,例如,gcc -o helloworld helloworld.c -l minigui_ths -l pthread -l dl -l png -l jpeg -l z
注意,这条命令里比文档中多链接了一个库 -l dl ,如果不链接这个库有可能会报错:
/usr/local/lib/libminigui_ths.so: undefined reference to 'dlopen'
/usr/local/lib/libminigui_ths.so: undefined reference to 'dlclose'
...
...

浙公网安备 33010602011771号