起初用Ubuntu最新版安装,发现无法apt-get install qt3-dev-tools embedded,因此不建议采用其它版本安装MiniGUI。
以下操作尽量在su下完成!
基于一个纯净的Ubuntu,首先调整vi,不然自带的vi实在是很难用
apt-get remove vim-common
apt-get install vim
vi /etc/vim/vimrc
"以gb2312保存
set fenc=gb2312
"以utf-8显示
set enc=utf-8
"尝试以utf-8,gb2312读取
set fencs=utf-8,gb2312
"显示行号
set nu
"制表符宽度
set tabstop=4
set softtabstop=4
"缩进宽度(默认为8)
set shiftwidth=4
"自动缩进
set autoindent
set cindent
对于已经固定编码的文件,可以在打开后set fenc=gb2312,然后wq将其转码
接着安装g++,不过过会编译时会报错,因为找不到g++
apt-get install build-essential
安装tar包的方式是
tar zxvf XXX.tar.gz
cd YYY
./configure
make
make install
以此方式以此安装zlib、png、jpeg、minigui、minigui的资源,这些包都可以从minigui官网上下载到
简要介绍下Makefile相关指令
make
根据Makefile文件编译源代码、连接、生成目标文件、可执行文件。
make clean
清除上次的make命令所产生的object文件(后缀为“.o”的文件)及可执行文件。
make install
将编译成功的可执行文件安装到系统目录中,一般为/usr/local/bin目录。
make dist
产生发布软件包文件(即distribution package)。这个命令将会将可执行文件及相关文件打包成一个tar.gz压缩的文件用来作为发布软件的软件包。
它会在当前目录下生成一个名字类似“PACKAGE-VERSION.tar.gz”的文件。PACKAGE和VERSION,是我们在configure.in中定义的AM_INIT_AUTOMAKE(PACKAGE, VERSION)。
make distcheck
生成发布软件包并对其进行测试检查,以确定发布包的正确性。这个操作将自动把压缩包文件解开,然后执行configure命令,并且执行make,来确认编译不出现错误,最后提示你软件包已经准备好,可以发布了。
make distclean
类似make clean,但同时也将configure生成的文件全部删除掉,包括Makefile文件。
接下来设置lib环境变量
vi /etc/ld.so.conf
添加include /usr/local/lib
ld config
依旧按照上边的方式安装libmgplus与qvfb2,在安装qvfb2时
要先apt-get install qt3-dev-tools-embedded
并给./configure携带参数--with-qt-includes=/usr/include/qt3 --with-qt-libraries=/usr/lib/qt3
安装mg-sample,
vi /usr/local/etc/MiniGUI.cfg
将第44行的gvfb改为qvfb2
进入mg-sample的src目录,
./helloworld
apt-get install automake
【基于下列目录结构进行编译】
Hello
src
Hello.c
[i]
在src下gcc -o Hello Hello.c -lminigui_ths -ljpeg -lpng -lz -lpthread -ldl
[ii]
[1]Hello下的configure.in
dnl Process this file with autoconf to produce a configure script.
AC_PREREQ(2.13)
dnl 在下面的宏中指定一个项目源文件
AC_INIT(src/Hello.c)
dnl ========================================================================
dnl needed for cross-compiling
AC_CANONICAL_SYSTEM
dnl ========================================================================
dnl Checks for programs.
AC_PROG_MAKE_SET
AC_PROG_CC
dnl 在下面的宏中指定项目名称和项目版本号
AM_INIT_AUTOMAKE(Hello,1.0)
dnl ========================================================================
dnl Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
dnl ========================================================================
dnl Checks for header files.
AC_HEADER_STDC
AC_HEADER_SYS_WAIT
AC_HEADER_TIME
AC_CHECK_HEADERS(sys/time.h unistd.h)
dnl ========================================================================
dnl check for libminigui
have_libminigui="no"
AC_CHECK_HEADERS(minigui/common.h, have_libminigui=yes, foo=bar)
dnl ========================================================================
dnl check for runtime mode of MiniGUI
dnl ==========================================================
threads_version="no"
AC_CHECK_DECLS(_MGRM_THREADS, threads_version="yes", foo=bar, [#include <minigui/common.h>])
procs_version="no"
AC_CHECK_DECLS(_MGRM_PROCESSES, procs_version="yes", foo=bar, [#include <minigui/common.h>])
standalone_version="no"
AC_CHECK_DECLS(_MGRM_STANDALONE, standalone_version="yes", foo=bar, [#include <
minigui/common.h>])
dnl ========================================================================
dnl check for newgal or oldgal interface.
use_newgal="no"
AC_CHECK_DECLS(_USE_NEWGAL, use_newgal="yes", foo=bar, [#include <minigui/common.h>])
dnl ========================================================================
dnl Write Output
if test "$ac_cv_prog_gcc" = "yes"; then
CFLAGS="$CFLAGS -Wall -Wstrict-prototypes -pipe"
fi
if test "x$threads_version" = "xyes"; then
CFLAGS="$CFLAGS -D_REENTRANT"
LIBS="$LIBS -lminigui_ths -lpthread"
else
if test "x$standalone_version" = "xyes"; then
LIBS="$LIBS -lminigui_sa"
else
LIBS="$LIBS -lminigui_procs"
fi
fi
AC_CHECK_DECLS(_HAVE_MATH_LIB, LIBS="$LIBS -lm", foo=bar, [#include <minigui/common.h>])
AC_CHECK_DECLS(_MGIMAGE_PNG, LIBS="$LIBS -lpng", foo=bar, [#include <minigui/common.h>])
AC_CHECK_DECLS(_MGIMAGE_JPG, LIBS="$LIBS -ljpeg", foo=bar, [#include <minigui/common.h>])
AC_CHECK_DECLS(_MGFONT_TTF, LIBS="$LIBS -lttf", foo=bar, [#include <minigui/common.h>])
AC_CHECK_DECLS(_MGFONT_FT2, LIBS="$LIBS -lfreetype", foo=bar, [#include <minigui/common.h>])
dnl 在下面的宏中列出要生成的Makefile文件
AC_OUTPUT(
Makefile
src/Makefile
)
if test "x$have_libminigui" != "xyes"; then
AC_MSG_WARN([
MiniGUI is not properly installed on the system. You need MiniGUI Ver 3.0.2
or later for building this package. Please configure and install MiniGUI Ver 3.0.2 first.
])
fi
[2]Hello下的Makefile.am
AUTOMAKE_OPTIONS=foreign
SUBDIRS=src
[3]src下的Makefile.am
noinst_PROGRAMS=Hello
Hello_SOURCES=Hello.c
[4]
在Hello下,
aclocal
autoconf
automake --add-missing
./configure
make
【解决MiniGUI的中文乱码】
vi /usr/local/etc/MiniGUI.cfg
[systemfont]
font_number=6
#font0=rbf-FixedSys-rrncnn-8-16-ISO8859-1
font0=rbf-fixed-rrncnn-8-16-ISO8859-1
font1=*-fixed-rrncnn-*-16-GB2312
font2=*-Courier-rrncnn-*-16-GB2312
font3=*-SansSerif-rrncnn-*-16-GB2312
font4=*-Times-rrncnn-*-16-GB2312
font5=*-Helvetica-rrncnn-*-16-GB2312
default=0
wchar_def=1
fixed=1
caption=2
menu=3
control=3
[rawbitmapfonts]
font_number=4
name0=rbf-fixed-rrncnn-8-16-ISO8859-1
fontfile0=/usr/local/share/minigui/res/font/8x16-iso8859-1.bin
name1=rbf-fixed-rrncnn-16-16-GB2312-0
fontfile1=/usr/local/share/minigui/res/font/song-16-gb2312.bin
name2=rbf-fixed-rrncnn-6-12-ISO8859-1
fontfile2=/usr/local/share/minigui/res/font/6x12-iso8859-1.bin
name3=rbf-fixed-rrncnn-12-12-GB2312-0
fontfile3=/usr/local/share/minigui/res/font/song-12-gb2312.bin
[varbitmapfonts]
font_number=3
name0=vbf-Courier-rrncnn-10-15-ISO8859-1
fontfile0=/usr/local/share/minigui/res/font/Courier-rr-10-15.vbf
name1=vbf-Helvetica-rrncnn-15-16-ISO8859-1
fontfile1=/usr/local/share/minigui/res/font/Helvetica-rr-15-16.vbf
name2=vbf-Times-rrncnn-13-15-ISO8859-1
fontfile2=/usr/local/share/minigui/res/font/Times-rr-13-15.vbf
【MiniGUI的陷阱】
[1]StripPopupHead要在插入完菜单项后调用
[2]不加\n的话printf不会立即输出
[3]控件必须先Insert到父中!比如CPropSheet ps
要先Insert(&ps)以创建ps,然后ps.Insert(xxx)