当前位置:Linux教程 - Linux资讯 - 如何用 Linux 开发 Palm 程序

如何用 Linux 开发 Palm 程序

  Palm   是么是 Palm 大家一定知道.现在越来越多的人投入到 Palm 程序开发的行列中来.今天,就让我们自己也来体会一下如和在 Linux 上开发 Palm 的程序吧.   为什么是 Linux   原因很简单,因为 Linux 是免费的.因为 Linux 下的很多工具也都是免费的. 同时, Linux 本身就是一个最好的程序开发平台.   在 Linux 中写 Palm 程序,除了需要一个可以正常工作的 Linux 环境以外,我们还需要以下的东西:  · 1. 我们需要 Palm OS 的 SDK 来开发 Palm 的程序. Palm 的 SDK 可以在 Palm 的网站中免费下载: http://www.palmos.com/dev/   · 2. Palm Emulator - Palm 的仿真器,用来仿真 Palm 执行我们 写出的 Palm 程序. Palm Emulator 也可以子爱 Palm 的网 站中免费下载: http://www.palmos.com/dev/   · 3. RPC-Tools 如果想在 Linux 中开发 Palm 的程序. 就需要用到 RPC-Tools 了. RPC-Tools 实际上是通过对 the GNU Compiler Collection, Assembler, linker, 跟 symbolic debugger 做 一些必要的修改,好让我们可以在 Linux 上面用 C/C++ 来开发 Palm 的程序. RPC-Tools 可以在 http://prc-tools.sourceforge.net/ 中免费下载.   · 4. gcc-2.95.3 我们需要打造出一个 cross compiler, 按照 RPC-Tools 的建议,这里我们选择了下载 gcc-2.95.3: http://www.gnu.org/software/gcc/gcc-2.95/   · 5. GDB - 用来建立 cross debuger (除错), 同样的,按照 RPC-Tools 中的建议,我们选择 gdb-5.0 : FTP://sources.redhat.com/pub/gdb/old-releases/gdb-5.0.tar.bz2   · 6. Binutils - 我们所需要的一些工具,包含了: ld, as, ar, nm, objcopy, objdump, ranlib, size, strings, strip, c++filt, addr2line 和 nlmconv 这里我们选择 binutils-2.9.1 ftp://ftp.gnu.org/gnu/binutils/binutils-2.9.1.tar.gz   · 7. make-3.77 - 我们选择 make-3.77 ftp://ftp.gnu.org/pub/gnu/make/make-3.77.tar.gz   · 8. PilRC - PilRC 是 Palm 的 resource compiler. 也就是说把 m68k 的可执行程序代码编译成 palm 的 .prc 文件. PilRC 可以 在下面的连结中免费取得: http://www.ardiri.com/index.PHP?redir=palm&cat=pilrc&subcat=download   这里用于测试的系统是 RedHat 7.3   安装 Palm SDK   首先 tar vxfz sdk50.tar.gz 这时侯会出现一个 palmos-sdk 的 rpm 文件. 用 rpm -ivh 给安装上去就好. SDK 会被安装在 /opt/palmdev/sdk-5 中. 我们现在需要做一个 symbolic link, 把 sdk-5 link 到 sdk 上面去.   cd /opt/palmdev  ln -s sdk-5 sdk  现在我们已经安装好了 Palm SDK 了. 接下来就该安装开发所需要的环境了.   安装 PRC-Tools 以及 cross compile 所需要的工具   收先我们建立一个新的目录   mkdir /tmp/prc  然后把 prc-tools-2.0.92.tar.gz binutils-2.9.1.tar.bz2 gcc-2.95.3.tar.bz2 gdb-5.0.tar.bz2 make-3.77.tar.gz 都 copy 过去.   cp prc-tools-2.0.92.tar.gz /tmp/prc  cp binutils-2.9.1.tar.bz2 /tmp/prc  cp gcc-2.95.3.tar.bz2 /tmp/prc  cp gdb-5.0.tar.bz2 /tmp/prc  cp make-3.77.tar.gz /tmp/prc  然后 cd 到 /tmp/prc 目录下. 执行解压缩的动作:   收先把所有 .gz 的解压缩    for i in *.gz; do tar vxfz $i; done     接下来是一些用 bzip2 压缩的 .bz2 文件    for i in *.bz2; do tar vxfj $i; done    prc-tools 为以上的这些程序,有做一些改动,所以我们需要把上面的程序代码 patch 一下:  cat prc-tools-2.0.92/*.palmos.diff patch -p0  现在我们进入 prc-tools-2.0.92 的目录,首先我们需要做的是把 binutils-2.91, gdb-5.0, gcc-2.95.3 跟 make-3.77 这几个目录用 symbolic link 分别 link 到 prc-tools-2.0.92 这个目录中.  cd prc-tools-2.0.92  ln -s ../binutils-2.9.1 binutils  ln -s ../gcc-2.95.3 gcc  ln -s ../gdb-5.0 gdb  ln -s ../make-3.77 make  为了保持我们程序源码目录的整洁与完整性,所以我们在编译的时侯, 单另建立一个目录 build:  cd ..  mkdir build  现在我们只要跑 prc-tools-2.0.92 中的那个 configure 就好了  ../prc-tools-2.0.92/configure --target=m68k-palmos --enable-languages=c,c++  这里面我们分别传给 configure 两个参数, 一个是告诉我们的 target 为 m68k-palmos 另一个是 enable C/C++ 这两种语言. prc-tools 中的这只 configure script 会帮我们把 binutils, gcc, gdb, make 这四个程序所需要的 Makefile 也同时帮我们建立好. 现在在我们的 build 目录中,就有了以下这些东西:  binutils config.log crt gcc include libm Makefile  config.cache config.status doc gdb libc make tools      现在我们只要用 make all-install 就好了. (如果您不是用 root 帐号, 不要忘记 su 成 root)   make all-install   因为需要 compile 的时间满长的.如果您的系统中有超过一颗的 CPU 记得在 make 后面加上 -j number 的选项,其中 number 的 value 就是您 CPU 的数量加一. 例如您有两颗 CPU 就可以用 make -j3 all-install, 如果有三颗就用 make -j4 all-install. 如果您的机器又很大的 RAM (好几 GB)然后也有个十几颗的 CPU, 那么也可以用 make -j all-install 来编译.如果 -j 后面没有跟任何数字,那么 make 就不会对 jobs 做任何的限制. 详细的情况请自行 man make 看一下.   在我们编译的过程中,还有己个小小的问题需要解决一下(至少这个问题存在于 RedHat 版本的系统中)首先遇到的问题是, 在 gdb 的编译中有一个错误:  In file included from /usr/include/curses.h:111,   from ../../../prc-tools-2.0.92/gdb/gdb/utils.c:28:  /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdbool.h:39: conflicting types for `false'  ../bfd/bfd.h:101: previous declaration of `false'  /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdbool.h:41: conflicting types for `true'  ../bfd/bfd.h:101: previous declaration of `true'    我们这里看到在 gdb/gdb.utils.c 中的第 28 行有 include curses.h 这个文件.而 curses.h 中的第 111 行又 include 了 stdbool.h, stdbool.h 中定义了 false, 而 bfd/bfd.h 中同时也定义了 false, 这样两个 false 就冲突了.所以造成编译失败.这里用最简单也是最偷懒的作法,打开   /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdbool.h  把:  typedef enum   {   false = 0,   true = 1   } _Bool;    这己行给暂时 mark 起来    /*  typedef enum   {   false = 0,   true = 1   } _Bool;  */    然后再重新     make all-install    现在我们会遇到第二个问题:    gcc -DEXEC_PREFIX=\"/usr/local\" -I. -I../../prc-tools-2.0.92/tools/../binutils/include -I../binutils/bfd -g -O2 -o def.yy.o -c def.yy.c  ../../prc-tools-2.0.92/tools/def.l:35:19: utils.h: 没有此一档案或目录  ../../prc-tools-2.0.92/tools/def.l:37:23: pfdheader.h: 没有此一档案或目录      找不到 utils.h 跟 pfdheader.h 这个很容易解决,把 prc-tools-2.0.92/tools 下面这两个文件复制到 build/tools 下面就好了,这里我们把全部的东西都给复制过去, 不然等会还会继续说找不到 utils.h 的文件   cp ../prc-tools-2.0.92/tools/* tools/    然后继续 make all-install    接下来又会有一个错误中断编译:    gcc -DEXEC_PREFIX=\"/usr/local\" -I. -I../../prc-tools-2.0.92/tools/../binutils/include -I../binutils/bfd -g -O2 -o def.yy.o -c def.yy.c  ../../prc-tools-2.0.92/tools/def.l:39: conflicting types for `dup'  /usr/include/unistd.h:441: previous declaration of `dup'    这里是说,在 def.l 中第 39 行定义的 dup 已经在 /usr/include/unistd.h 中的第 441 行定义过了.所以产生了冲突.    还是用最简单的方法来解决:  首先要做的是    vim tools/def.yy.c  把第十二行的 #include 改成 #include "unistd.h" 这样编译 def.yy.c 的时侯,就不会去找 /usr/include/unistd.h 这个文件,而是找 tools 下面的 unistd.h   接下来    cp /usr/include/unistd.h tools/    把 unistd.h 复制到 tools 下面,再把 unistd.h 改动一下    最后     vim tools/unistd.h    把第 441 行的 extern int dup (int __fd) __THROW;  给 mark 起来  // extern int dup (int __fd) __THROW;  存盘后重新 make all-install 就再没有问题了. 这时侯,在您的 /usr/local/bin 下面就已经有了我们做 cross compile 所需要的全部工具了.   PS. 不要忘记把了把 /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdbool.h 改回原貌喔.   安装 pilrc   现在到了最后一步,安装 pilrc   首先把 pilrc-2.9.tar.gz 复制到 /tmp 中  cp pilrc-2.9.tar.gz /tmp    然后解压缩:
[1] [2] 下一页 

(出处:http://www.sheup.com)


上一页 [1] [2]