[ARM] Windows Mobileクロス開発

Windows Mobileアプリケーションをクロス開発するためクロスコンパイラを準備しました。Interix用の手順はpmgrで追加パッケージにしました。ただしCeGCCそのものではないため問題があります。(後述)

  • pmgr (arm-wince-pe-20081019.tar.gz)

実はパッケージ自体は3ヶ月くらい前にx64のクロスコンパイラと同時にできていたのですが、問題があったため公開していませんでした。

binutilsやgccにパッチを当てずにどこまで出来るか確認したかったため、CeGCCのパッチを当てずにオリジナルを使用しています。CeGCCからはヘッダとライブラリだけを持って来ていますが、CRTが使えません。(後述)

ソースをCeGCCのSVNから取得すれば良いというのは分かっていたのですが、Windows Mobile開発の必要に迫られていなかったため放置していました。しかしARMの実験にはこのままでも使えるようなので、とりあえず公開することにしました。

あくまでARMの実験用で、実用には不向きです。いずれCeGCCにきちんと対応したものを作り直す予定です。

使い方、制約など

以下のような問題があります。

  1. CeGCCのCRTが使えません。gccからリンクするとcrt0.oが見付からないというエラーになります。そのためエントリーポイントを自前で定義します。
  2. マクロが足りません。CeGCCのWin32APIのヘッダを使用するには-DARMオプションが必要です。CEのAPIはW系(Unicode)だけなので-DUNICODEオプションも必要です。
  3. シンボルの扱いがCeGCCとは異なります。そのままではDLLにリンクできないため-fno-leading-underscoreオプションが必要です。

これらの問題を回避して使う方法は以下の通りです。

次のソースをtest.cとして用意します。

#include <windows.h>

void winmain()
{
    MessageBox(0, L"HELLO", L"WORLD", MB_OK);
}

以下のようにするとtest.exeが出力されます。WILLCOM 03での動作を確認しました。

% arm-wince-pe-gcc -o test.exe -e winmain -DUNICODE -DARM -fno-leading-underscore test.c -nostdlib -lcoredll

正直、これでは既存のアプリケーションをコンパイルするのは厳しいです。やはりCeGCCでないと実用にはならないようです。

カテゴリー: ARM パーマリンク

コメントを残す