« [Windows Mobile] Windows Mobileでも英文音声合成ソフトウェアfliteで遊ぶ | Main | [Zaurus] Rubyからシリアルポートをコントロール ruby-serialport »

2007.03.02

[Windows Mobile] Windows Mobile用クロスコンパイラ、CeGCC再び

以前のエントリCygwin/i386 Linux用Windows CE(PocketPC)クロスコンパイラCeGCCを試すの続編です。

そういえば、Cygwin / i386 Linuxで動作するARM CPU搭載Windows Mobile向けクロスコンパイラであるところのCeGCCの様子は最近どうかいな、ということで見に行ってみると、ちょうど2007年2月リリースのブツ0.10.0がアップロードされていました。

早速昨年10月にインストールした0.1.0と入れ替えてみました。

CeGCCのCygwin環境へのインストール

仔細は説明を省きますが、Cygwinをインストールします。その後に、

SourceForgeの当該ページへ行き、「cygwin binaries, svn 0.10.0.20070208」を落としてきます。

自分のとこではd:\cygwinがCygwinのルートなので、d:\cygwin\以下に上記のtarballを展開。
(以後、パスは自分の環境に読み替えてください)

展開すると、optから始まるディレクトリツリーが出来上がります。

~/.bashrcをいじるなどして、d:\cygwin\opt\cegcc\binにパスを通します。

自分の環境ではシンボリックリンク(0バイトのファイル)が機能していなかったので、それぞれ手動で実体と差し替えました。

シンボリックリンクはd:\cygwin\opt\cegcc\binに存在し、同一ディレクトリにあるツールや、d:\cygwin\opt\cegcc\arm-wince-cegcc\binにあるツールに向かって張られているようです。

要するにd:\cygwin\opt\cegcc\binにある0バイトのファイルの実体をd:\cygwin\opt\cegcc\binとd:\cygwin\opt\cegcc\arm-wince-cegcc\binから探して、シンボリックリンクの名前にリネームして置き換えるわけです。

もちろん、シンボリックリンクが機能する環境ではそんなことをする必要はありません。

いや、機能しなくとも、こんな頭悪くない解決策があるに違いません。

基本的に、これで基本的なインストールは完了(のはず)です。

Cのソースのコンパイルは、例えばtest.cというファイル名のソースを書いたとして、

arm-wince-cegcc-cc test.c -o test.exe

でできるはずです。

試しにQKCをコンパイル

QKCのソースがたまたまあったのでコンパイルしてみることにしました。

UNIX向けの「QKC - Quick KANJI code Converter C Version 1.0」というやつですね。
Makefileを編集して、コンパイラ指定を「CC = arm-wince-cegcc-gcc」に書き換えます。

そしてmake。何と! 何事も無かったようにコンパイルが通ります!

ActiveSync中のh2210にcecopyを使って出来たqkc.exeをコピー(いや別に普通の手段でファイルをコピーすればいいと思います)。

QKCを動かしてみる

CeGCCでコンパイルしたバイナリの実行にはDLLが必要です。

d:\cygwin\opt\cegcc\arm-wince-cegcc\lib\device\cegcc.dll
d:\cygwin\opt\cegcc\arm-wince-cegcc\lib\device\cegccthrd.dll

この二つのDLLをデバイスの\Windowsにコピーします。

とりあえずShift-JISで書いたテキストqkc.txtを用意して、MortScriptから実行してみます。

Run("\qkc.exe", "-e \qkc.txt")

確かにqkc.txtがEUC-JPにナッテル!!!

標準出力に表示されるヘルプなんぞを見たいなと思ってDOS窓Openをインストール。しかしqkc -Hしても何も表示されず。

どうやら、PocketConsoleを使うといいようです。(参考)

PocketConsoleをインストールしたら、\Windows\CMD.exeを起動します。

qkc -H

ヘルプ出ました! やべー、マジやべー普通に使えてます。

20070302054020

type qkc.txt | qkc -s >qkc2.txt

パイプ、リダイレクト、使えてます。typeなんて使ったの何年ぶりだよ。

その他の戦績

Debian JPのsed-ja-3.02.orig試しました。

CC=arm-wince-cegcc-gcc ./configure --host=arm-wince

でmake。とりあえず動きました。

echo test | sed -e 's/^.//'

est

p2conv試しました。

CC=arm-wince-cegcc-gcc

コンパイルできたっぽいです。

nkfコンパイルを試しました。MakefileのCCを

CC = arm-wince-cegcc-gcc

に書き換えてmake。コンパイルは通りましたが、出力が空です。正常な動作をしません。
ヘルプは表示されたので、スクリーンショットを貼っておきます。

20070302054059

wgetのコンパイルを試しました。

CC=arm-wince-cegcc-gcc ./configure --host=arm-wince

でとりあえずやってみました。コンパイルは順調に進むものの、リンク段階でundefined reference toが出ます。何のリンクが必要なんだ?

host.o:host.c:(.text+0x8a0): undefined reference to `__h_errno_location'

あとがき

分からない人には全く分からないでしょうが、これはかなり楽しいことになってきました。

ハードルの高くなさそうなもののコンパイルを試してみたいと思います。

|

« [Windows Mobile] Windows Mobileでも英文音声合成ソフトウェアfliteで遊ぶ | Main | [Zaurus] Rubyからシリアルポートをコントロール ruby-serialport »