看了不少网上的关于moto e680系列和a1200系列开发环境配置的帖子,对偶帮助颇大现在实际建立一个:
(for linux)
首先,必要的准备工作:
,这个工具是由个人整理的,去掉了与ARM无关的很多脚本,并且限定了需要编译的文件版本,使用起来比较简单。
本机新建了一个用户gcc,准备用于编译,root用户会提示禁止操作的。
这里使用的是在/home/gcc目录下用gcc用户解压:
bunzip2 ezx-crosstool-0.5.tar.bz2
tar xvf ezx-crosstool-0.5.tar
系统会自动生成/home/gcc/ezx-crosstool-0.5这个目录。
gcc-3.3.6.tar.bz2 GCC编译器的源代码
glibc-2.3.2.tar.bz2 提供系统调用和基本函数库
glibc-linuxthreads-2.3.2.tar.bz2 用于支持POSIX线程的函数库
在
http://www.kernel.org/pub/linux/kernel/v2.4/下载如下一个文件:
linux-2.4.26.tar.bz2 Linux核心源代码
全部下载后,放在/home/gcc/ezx-crosstool-0.5/downloads下,打开
/home/gcc/ezx-crosstool-0.5/build.sh文件,内容如下:
#!/bin/sh
set -ex
CROSSTOOL_DIR=`pwd`
TARBALLS_DIR=$CROSSTOOL_DIR/downloads
RESULT_TOP=$CROSSTOOL_DIR/gcc-arm-iwmmxt
export TARBALLS_DIR RESULT_TOP
GCC_LANGUAGES=”c,c++”
export GCC_LANGUAGES
...
详细内容以后会解释,这里只注意RESULT_TOP=$CROSSTOOL_DIR/gcc-arm-iwmmxt
这句,这是说明编译后的路径,可以自定义修改。
如:
RESULT_TOP=/home/gcc/arm
到这里,准备工作就结束了。
cd /home/gcc/ezx-crosstool-0.5
./build.sh
我使用的笔记本(2GRAM+PM1.7G)+虚拟机,大概不到1个小时。完成后在系统环境
PATH添加新路径内容。
export PATH=$PATH:/home/gcc/arm/gcc-3.3.6-glibc-2.3.2/arm-linux/bin
就可以试试编译几个hello world程序,然后拷贝到手机上跑一下试试了。
这些仅仅是能够编译命令行的程序,如果需要编译qte或者ezx的图形界面程序,需要另外下载:
dev-ezx-0.2.0,网上关于这个的描述很多,偶就不聒噪了。
(for win32)
下载cygwin,最好是完全安装,然后下载上述的ezx-crosstool-0.5文件,并把上面的文件下载到必要的download目录,然后运行build.sh。cygwin在win32环境下,大概需要编译3-4个小时左右,才能把这些arm-linux-gcc,arm-linux-g++编译成功。需要修改.bashrc,在最后一行添加:
#我这里的目录是~/moto/ezx-crosstool-0.5
PATH=$PATH:.:~/moto/ezx-crosstool-0.5/gcc-arm-iwmmxt/gcc-3.3.6-glibc-2.3.2/arm-linux/distributed/bin
export PATH
把a1200的/usr/lib整个目录拷贝到:~/moto/dev-ezx-0.2.0/目录,覆盖原有的lib目录。
然后就是准备编译一点gui程序试试了,这个是makefile
EZX_BASE=..
XPREFIX=arm-linux-
CXX=$(XPREFIX)g++
CC=$(XPREFIX)gcc
STRIP=$(XPREFIX)strip
CXXFLAGS=-fno-exceptions -fno-rtti -DQWS -Wall -g
MOC=$(EZX_BASE)/moc/moc
INCLUDE=-I$(EZX_BASE)/include/qt -I$(EZX_BASE)/include/ezx
LIBDIRS=-L$(EZX_BASE)/lib -L$(EZX_BASE)/lib/ezx/lib
##LIBS=-lezxappbase -lezximagebase -lezxjpeg -lipp-jp -lipp-miscGen -lqte-mt
LIBS= -lezxappsdk -lipp-jp -lezxopenwindow -lipp-miscGen -lezxappbase -lqte-mt -lezxjpeg -lezxpm
OBJS=test2.o
APP=test2
all: $(APP)
dist: $(APP).pkg
test2.o: test2.cpp test2.moc
$(APP).pkg: $(APP).o
$(STRIP) $(APP)/$(APP)
tar cvfz $(APP).tar.gz $(APP)
mv $(APP).tar.gz $(APP).pkg
clean:
rm -f $(OBJS) $(APP)/$(APP) $(APP).pkg *~ $(APP)/*~ *.moc
%.o: %.cpp
$(CXX) $(CXXFLAGS) $(INCLUDE) -c $<
%.moc: %.cpp
$(MOC) $< -o $@
$(APP): $(OBJS)
$(CXX) $^ -o $(APP)/$@ $(LIBDIRS) $(LIBS)
这个是cpp:
#include <zmessagebox.h>
#include <zapplication.h>
#include <qtextcodec.h>
#include <stdio.h>
#include <stdlib.h>
#include <ezxres.h> //for dispaly system icon
QTextCodec* utf8_codec = QTextCodec::codecForName(”utf-8”);
QString un_utf8(const char*ChnStr)
{
return utf8_codec->toUnicode(ChnStr);
}
int main(int argc, char** argv)
{
ZApplication app (argc, argv);
RES_ICON_Reader ir;
QPixmap *pm;
pm = new QPixmap(”Dialog_Complete.gif”);
pm[0] = ir.getIcon(”Dialog_Complete.gif”, 1); // This is Complete icon
int reply = ZMessageBox::information(0, pm[0], un_utf8(”hello wayne”), un_utf8(”你好”), un_utf8(”no”), un_utf8(”cancel”));
// use un-utf8 to display Unicode Chinese
switch(reply)
{
case 0:
ZMessageBox::timerMessage(0, pm[0],un_utf8(”Shut down now...”),4);
break ;
case 1:
printf(”NO was Pressed\n”);
break;
case 2:
printf(”Cancel was Pressed\n”);
break;
}
return 0;
}
这是个简单的要死的程序,不做解释了,如有不明白的,看看ezx的头文件。
test2.desktop文件:
[Desktop Entry]
BigIcon=test2.png
Comment=wayne test2 program
Exec=test2.lin
Icon=test2s.png
Name=5M周刊
OsVersion=1.0
Shared=0
Type=Application
test2.lin文件:
#!/bin/bash
export QTDIR=/usr/lib/ezx
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export EZX_RES_FONT_PATH=$QTDIR/lib/fonts
export EZX_RES_ICON_PATH=/usr/language/icon
chmod +x /mmc/mmca1/.system/QTDownLoad/test2/test2
exec /mmc/mmca1/.system/QTDownLoad/test2/test2
这里需要提一下的是:cygwin的emacs用ctrl+x ctrl+c退出不了,呵呵,直接打开cygwin.bat文件,然后在@echo off下面添加:
set CYGWIN=binmode tty ntsec
Linux联盟收集整理