【MiniGui项目搭建】

先安装工具

sudo apt install make
sudo apt install cmake
sudo apt-get install build-essential  //安装编译工具:
sudo apt-get install libx11-dev libxext-dev libxtst-dev  //安装依赖的第三方库:


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

1. 安装gvfb (gvfb-1.0.0.tar.gz)

说明:

tar xvzf gvfb-1.0.0.tar.gz    //解压
cd gvfb-1.0.0/
mkdir build
cd build
cmake ..            //生成makefile
sudo make install   //编译并安装

报错一:
在这里插入图片描述
解决办法:
打开$gvfb-1.0.0/src/CMakeLists.txt这个脚本,修改TARGET_LINK_LIBRARIES这一行,加入-lX11,重新执行cmake生成Makefile
在这里插入图片描述

报错二:

报错三:

2. 安装qvfb (qvfb2-2.0 .tar.gz )

版本一: qvfb-1.0.tar.gz

tar zxvf qvfb-1.0.tar.gz
cd qvfb-1.0
./configure
make
make install
cd ..

版本二: qvfb2-2.0 .tar.gz

**Ubuntu14.04环境安装qvfb工具**
1.  工具
sudo apt-get install build-essential  //安装编译工具:
sudo apt-get install libx11-dev libxext-dev libxtst-dev  //安装依赖的第三方库:
sudo apt-get install build-essential ccache git libgmp3-dev libssl-dev zlib1g-dev libjpeg8-dev libharfbuzz-dev libfreetype6-dev libgl1-mesa-dev libgtk2.0-dev      //安装工具

2.  下载qt-4.8.6源码 
https://download.qt.io/archive/qt/4.8/4.8.6/   
tar zxvf qt-everywhere-opensource-src-4.8.6.tar.gz 
 //这里解释一下,为什么不使用qt提供的最新版本,当前qt已经更新到了qt5.7版本,亲测过还是比较稳定可用的。但是我下载过qt5.x的版本,并没有找到qvfb工具,
3. 配置QT库
cd qt-everywhere-opensource-src-4.8.5
sudo ./configure
出现信息:
Type 'c' if you want to use the Commercial Edition.
Type 'o' if you want to use the Open Source Edition
输入 o 回车
再输入 yes
Do you accept the terms of either license? 输入yes

4. 编译QT库
sudo make
这里编译需要耐心等候,一般需要几个小时

5. 安装QT库
sudo make install

编译过程如果突然错误提示缺少库的话就使用apt源默认安装就好了。
编译通过,安装完成后,需要将qt的库和可执行文件路径配置到环境变量中,否则在安装qvfb时会报错。
6. 配置QT库到环境变量中
export PATH=$PATH:/usr/local/Trolltech/Qt-4.8.5/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/Trolltech/Qt-4.8.5/lib

7.  处理qvfb
进入qt4.8.5源码qt-everywhere-opensource-src-4.8.5目录下的tools/qvfb
cd tools/qvfb

8. 执行qmake命令
/usr/local/Trolltech/Qt-4.8.5/bin/qmake
9. 编译
make

10. 运行
编译成功后,将源码qt-everywhere-opensource-src-4.8.5目录bin下的qvfb文件拷贝到qt安装目录bin下
cp qt-everywhere-opensource-src-4.8.5/bin/qvfb /usr/local/Trolltech/Qt-4.8.5/bin

11. 最后测试一下运行qvfb
/usr/local/Trolltech/Qt-4.8.5/bin/qvfb -width 640 -height 480 -depth 16

提示:
Qt: Session management error: None of the authentication protocols specified are supported
解决
此提示可以不必理会,因为是用普通用户登陆图形界面的,现在却在root下执行带界面的qt可执行程序,
把终端切换到普通用户,提示就没了

提示:
Qt for Embedded Linux data directory is not owned by user 0h
Aborted (core dumped)
解决:
删除/tmp下的qtembedded-0删除后,再运行
rm /tmp/qtembedded-0

qtembedded-0是个数据文件,在安装好qvfb工具后,第一次使用它时就会在/tmp产生这个文件
它记录着第一次运行它时的用户,下一次运行的时候必须还是此用户,可以切换到原先第一次运行qvfb的用户。
或者把qtembedded-0删了,再运行重新产生记录

以后在需要使用minigui前,先运行qvfb模拟工具,让其在后台运行,这样minigui的界面就可以正常运行了
例如
/usr/local/Trolltech/Qt-4.8.5/bin/qvfb -width 640 -height 480 -depth 16 &

----------------
 配置qt-x11-free-3.3.0.tar.gz
在qt官网http://download.qt.io/archive/qt/3/
下载 qt-x11-free-3.3.0.tar.gz

解压

配置
./configure -prefix /usr/local/qt-x11-free-3.3.0

编译
sudo make

出现错误1:
error: ‘ptrdiff_t’ does not name a type
     typedef ptrdiff_t  difference_type;
解决:
打开qt-x11-free-3.3.0源码目录下include/qvaluelist.h与qmap.h,在最上面加入#include <cstddef>

出现错误2:
qt-x11-free-3.3.0/bin/uic: error while loading shared libraries: libqt.so.3: cannot open 
shared object file: No such file or directory

解决:
export LD_LIBRARY_PATH=/home/skyblue/work/jiale_rv1108/package/qt-x11-free-3.3.0/lib:$LD_LIBRARY_PATH

出现错误3
qvfbview.cpp: In constructor ‘QVFbView::QVFbView(int, int, int, int, QWidget*, const char*, uint)’:
qvfbview.cpp:118:15: error: cast from ‘unsigned char*’ to ‘int’ loses precision [-fpermissive]
     if ( (int)data == -1 )

解决:
打开qt-x11-free-3.3.0/tools/qvfb/qvfbview.cpp
把if ( (int)data == -1 )改为if ( (long)data == -1 )

再次make即可

安装
sudo make install

编译qvfb

export PATH=$PATH:/usr/local/qt-x11-free-3.3.0/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/qt-x11-free-3.3.0/lib

进入源码qt-x11-free-3.3.0目录下的tools/qvfb
cd tools/qvfb

执行qmake命令
/usr/local/qt-x11-free-3.3.0/bin/qmake

编译
make

编译成功后,将源码qt-x11-free-3.3.0目录bin下的qvfb文件拷贝到qt安装目录bin下
cp qt-x11-free-3.3.0/bin/qvfb /usr/local/qt-x11-free-3.3.0/bin

最后测试一下运行 qvfb
/usr/local/qt-x11-free-3.3.0/bin/qvfb -width 640 -height 480 -depth 16


3. 安装( minigui-res-1.6.10.tar.gz )资源文件

版本一: minigui-res-1.6.10.tar.gz

tar -zxvf minigui-res-1.6.10.tar.gz
cd minigui-res-1.6.10
sudo make install 

版本二: minigui-res-1.3.3.tar.gz

tar zxvf minigui-res-1.3.3.tar.gz
cd minigui-res-1.3.3
make install
cd ..

版本三: minigui-res-be-3.0.12.tar.gz

官网下载minigui-res-be-3.0.12.tar.gz

解压
tar xvzf minigui-res-be-3.0.12.tar.gz

配置
cd minigui-res-be-3.0.12
CC="gcc -m32" ./configure --prefix=/usr/local/minigui-3.0.12-pc

编译
make

安装
sudo make install

4. 安装 libminigui-1.3.3.tar.gz

# tar zxvf libminigui-1.3.3.tar.gz
# cd libminigui-1.3.3
#./configure
#make
#make install
#cd ..

5. 安装 libminigui-gpl-3.0.12.tar.gz

下载libminigui-gpl-3.0.12.tar.gz

解压
tar xvzf libminigui-gpl-3.0.12.tar.gz

配置
cd libminigui-gpl-3.0.12/
CC="gcc -m32" ./configure --prefix=/usr/local/minigui-3.0.12-pc --enable-qvfbial=yes --enable-videoqvfb=yes --enable-splash=no --enable-screensaver=no

编译
sudo make
安装
sudo make install

6. 安装 libminigui-3.0.12-linux.tar.gz

tar -zxvf libminigui-3.0.12-linux.tar.gz
cd libminigui-3.0.12-linux/
./configure       		// 配置
sudo make
sudo make install   // 安装

报错一:

./configure: line 15530: ./runme.sh: No such file or directory
WARNING: failed to generate license pictures.
(无视之)

报错二:
在这里插入图片描述

解决办法
在这里插入图片描述
修改后重新 sudo make
在这里插入图片描述
编译通过
sudo make install
在如下路径新建一个文件
在这里插入图片描述
在这里插入图片描述

报错三:

7. 安装 minigui 组件

7.1 libmgplus-1.2.4.tar.gz

方法一:
tar zxf  libmgplus-1.2.4.tar.gz
./configure  
sudo make
sudo make install

方法二:

报错一

make[4]: *** [lf_fashion.lo] Error 1
make[4]: Leaving directory /home/sun/minigui/libmgplus-1.2.4/src/api' make[3]: *** [all-recursive] Error 1 make[3]: Leaving directory /home/sun/minigui/libmgplus-1.2.4/src/api'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory /home/sun/minigui/libmgplus-1.2.4/src' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory /home/sun/minigui/libmgplus-1.2.4'

解决方法:

这主要是64位机上编译32位的问题,打开/libminigui-3.0.12-linux/include/common.h 做如下修改
:将typedef unsigned int HICON 改为 typedef unsigned long HICON  然后重新编译libminigui。 解决
继续向下编译  全部 ./configure  sudo make sudo make install

7.2 libmgi-2.0.4.tar.gz

方法一:
tar xzf libmgi-2.0.4.tar.gz
cd libmgi-2.0.4
./configure  
sudo make 
sudo make install

方法二:

7.3 libmg3d-1.0.2.tar.gz

方法一:
tar xvf libmg3d-1.0.2.tar.gz 
cd libmg3d-1.0.2
./configure  
sudo make 
sudo make install

方法二:

7.4 libmgutils-1.0.4.tar.gz

方法一:
tar xzvf libmgutils-1.0.4.tar.gz
cd libmgutils-1.0.4
./configure  
sudo make 
sudo make install

方法二:

7.5 libmgp-1.2.2.tar.gz

方法一:
tar xzvf libmgp-1.2.2.tar.gz
cd libmgp-1.2.2
./configure  
sudo make 
sudo make install

方法二:

7.6 libmgncs-1.0.8.tar.gz

方法一:


方法二:

错误一
再次遇到 _va.va = va;
在这里插入图片描述
修改:
在这里插入图片描述
在这里插入图片描述
需要mgplus,用vim注释掉这一句,编译成功

8. 编译 libmgplus-1.2.4

官网下载libmgplus-1.2.4.tar.gz

解压
libmgplus-1.2.4.tar.gz

配置
cd libmgplus-1.2.4
CC="gcc -m32" CXX="g++ -m32" ./configure --prefix=/usr/local/minigui-3.0.12-pc PKG_CONFIG_PATH=/usr/local/minigui-3.0.12-pc/lib/pkgconfig CPPFLAGS=-I/usr/local/minigui-3.0.12-pc/include

编译
sudo make

安装
sudo make install

2、编译mg-samples-3.0.12
解压
mg-samples-3.0.12.tar.gz

cd mg-samples-3.0.12
CC="gcc -m32" ./configure --prefix=/usr/local/minigui-3.0.12-pc PKG_CONFIG_PATH=/usr/local/minigui-3.0.12-pc/lib/pkgconfig CPPFLAGS=-I/usr/local/minigui-3.0.12-pc/include

编译
make

8. 编译 mg-samples-3.0.12.tar.gz

编译mg-samples-3.0.12前,先编译安装libmgplus-1.2.4库

先后台运行qvfb
/usr/local/qt-x11-free-3.3.0/bin/qvfb -width 1024 -height 1024 -depth 16 &

cd mg-samples-3.0.12/same 
./same
出现错误1:
error while loading shared libraries: libminigui_ths-3.0.so.12: cannot open shared object file: No such file or directory
解决:
把/usr/local/minigui-3.0.12-pc/lib添加到系统的环境变量
export LD_LIBRARY_PATH=/usr/local/minigui-3.0.12-pc/lib:$LD_LIBRARY_PATH

出现错误2:
MISC: Can not locate your MiniGUI.cfg file or bad files!
KERNEL>InitGUI: Initialization of misc things failure!

解决:
在MiniGUI应用程序启动时:
MiniGUI优先查找当前目录下的 MiniGUI.cfg 文件。
用户主目录下的 .MiniGUI.cfg 文件,其次是/usr/local/etc/MiniGUI.cfg。
最后是 /etc/MiniGUI.cfg 文件。
如果用户没有在当前目录及自己的主目录下建立对应的 MiniGUI.cfg 文件,则通常情况下,
/usr/local/etc/MiniGUI.cfg 文件就是 MiniGUI 所使用的默认运行时配置文件

这里选择把/usr/local/minigui-3.0.12-pc/etc/MiniGUI.cfg复制到/usr/local/etc目录下即可
cp /usr/local/minigui-3.0.12-pc/etc/MiniGUI.cfg /usr/local/etc/

修改配置MiniGUI.cfg文件, 修改以下选项
vi MiniGUI.cfg
	gal_engine=qvfb
	defaultmode=640x480-16bpp
	ial_engine=qvfb
	cursorpath=/usr/local/minigui-3.0.12-pc/share/minigui/res/cursor/
	respath=/usr/local/minigui-3.0.12-pc/share/minigui/res/
然后保存即可

出现错误3:
error while loading shared libraries: libjpeg.so.7: cannot open shared object file: No such file or directory

解决:
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

出现错误4:
KERNEL>InitGUI: Count not init mouse cursor!
KERNEL>InitGUI: Init failure, please check your MiniGUI configuration or resource.

解决:
检查MiniGUI.cfg文件的cursorpath和respath路劲是否配置正确
cursorpath=/usr/local/minigui-3.0.12-pc/share/minigui/res/cursor/
respath=/usr/local/minigui-3.0.12-pc/share/minigui/res/

再次运行
./same

错误一
/usr/local/lib/libminigui_ths.so: undefined reference to WndClientRect' /usr/local/lib/libminigui_ths.so: undefined reference to WndRect’
在这里插入图片描述
将WndClientRect与WndRect函数前面的inline删掉。重新编译
在这里插入图片描述

安装成功
运行 ./helloworld 安装成功
在这里插入图片描述


MiniGUI演示程序 (待验证)

test.c

#include <minigui/common.h>
#include <minigui/minigui.h>
#include <minigui/gdi.h>
#include <minigui/window.h>
#include <minigui/control.h>

#define MWINDOW_LX 10
#define MWINDOW_TY 50
#define MWINDOW_RX 230
#define MWINDOW_BY 180

static char * hello_str = "HelloMiniGUI!";

HWND hMainWnd;
static int WinProc (HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
{
	HDC hdc;
	RECT rc;
	switch (message){
	case MSG_PAINT :
		hdc = BeginPaint(hWnd);
		GetClientRect(hWnd, &rc);
		DrawText(hdc, hello_str, -1, &rc, DT_LEFT);
		EndPaint(hWnd, hdc);
		break;
	case MSG_CLOSE :
		DestroyMainWindow(hWnd);
		PostQuitMessage(hWnd);
		break;
	default :
		return(DefaultMainWinProc(hWnd, message, wParam, lParam));
	}
	return(0);
}

int InitMainWindow(void)
{
	MAINWINCREATE window_info;
	window_info.dwStyle = WS_VISIBLE | WS_BORDER | WS_CAPTION;
	window_info.dwExStyle = WS_EX_NONE;
	window_info.spCaption = "MiniGUI";
	window_info.hMenu = 0;
	window_info.hCursor = GetSystemCursor(0);
	window_info.hIcon = 0;
	window_info.MainWindowProc = WinProc;
	window_info.lx = MWINDOW_LX;
	window_info.ty = MWINDOW_TY;
	window_info.rx = MWINDOW_RX;
	window_info.by = MWINDOW_BY;
	window_info.iBkColor = COLOR_lightwhite;
	window_info.dwAddData = 0;
	window_info.hHosting = HWND_DESKTOP;
	hMainWnd = CreateMainWindow(&window_info);
	if (hMainWnd == HWND_INVALID)
		return(0);
	else
		return(1);
}

int MiniGUIMain (int argc, const char ** argv)
{
	MSG Msg;
#ifdef _LITE_VERSION
	SetDesktopRect(0, 0, 800, 600);
#endif
	InitMainWindow();
	ShowWindow(hMainWnd, SW_SHOWNORMAL);
	while (GetMessage(&Msg, hMainWnd))
	{
		TranslateMessage(&Msg);
		DispatchMessage(&Msg);
	}
	MainWindowThreadCleanup(hMainWnd);
	return(0);
}

#ifndef _LITE_VERSION
#include <minigui/dti.c>
#endif


编译

gcc –o test test.c –lpthread –lminigui –ljpeg –lpng –lz –lttf

将libminigui-1.3.so.3对应的LIB库从/usr/local/lib COPY到/usr/lib下面;
把/usr/local/etc/Minigui.cfg中[system]组中的gal_engine和ial_engine的值改为qvfb

qvfb –width 640 –height 480 –depth 16 &
./test
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

光芒Shine

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值