歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> 如何用 Linux 開發 Palm 程序

如何用 Linux 開發 Palm 程序

日期:2017/2/27 9:26:04   编辑:更多Linux
  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    然後解壓縮:




Copyright © Linux教程網 All Rights Reserved