Ubuntu10.04下的MiniGUI安装实录

起初用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)

你可能感兴趣的:(ubuntu)