MiniGui项目搭建
- 先安装工具
- Ubuntu 64bit兼容32bit GCC 交叉编译环境搭建
- 1. 安装gvfb (gvfb-1.0.0.tar.gz)
- 2. 安装qvfb (qvfb2-2.0 .tar.gz )
- 3. 安装( minigui-res-1.6.10.tar.gz )资源文件
- 4. 安装 libminigui-1.3.3.tar.gz
- 5. 安装 libminigui-gpl-3.0.12.tar.gz
- 6. 安装 libminigui-3.0.12-linux.tar.gz
- 7. 安装 minigui 组件
- 8. 编译 libmgplus-1.2.4
- 8. 编译 mg-samples-3.0.12.tar.gz
- 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