CeGCC

ページ名:CeGCC

CeGCC は Windows CE デバイス向けのオープンソースの非公式開発環境で、UNIX 環境で動作します。Cygwin や WSL を使えば Windows 環境でも利用できます。第5世代向けアプリはこの方法では作成不可能です。

GCC 9.3.0 をベースに移植されている版を用いて説明します。

目次

Windows[]

Windows Subsystem for Linux (WSL) を使う[]

UNIX と同じです。

Cygwin を使う[]

パッケージ libmpc3 が必要です。32-bit 版の場合はこちらから .tar.gz ファイルを、64-bit 版の場合はこちらをダウンロード・展開して利用します。PATH を設定した場合は arm-mingw32ce-g++ -v、設定していない場合は (配置場所)/bin/arm-mingw32ce-g++ -v を実行します。PATH を設定した後、既存のターミナルは開き直さないと反映されないことに注意します。これによって以下のような出力が得られれば環境構築は終了です。コマンドが見つからない等のエラーが出た場合は、正しく環境構築できていません。

Using built-in specs.COLLECT_GCC=arm-mingw32ce-g++COLLECT_LTO_WRAPPER=/main/bin/../libexec/gcc/arm-mingw32ce/9.3.0/lto-wrapper.exeTarget: arm-mingw32ceConfigured with: /home/cygwin/cegcc-build/gcc/configure --prefix=/opt/cegcc --build=i686-pc-cygwin --with-gcc --with-gnu-ld --with-gnu-as --enable-threads=win32 --disable-nls --enable-languages=c,c++ --disable-win32-registry --disable-multilib --disable-interwork --without-newlib --enable-checking --with-headers --disable-__cxa_atexit --with-libiconv-prefix=/usr/local --host=i686-pc-cygwin --target=arm-mingw32ceThread model: win32gcc version 9.3.0 (GCC)

WSL や Cygwin が使えない場合[]

Cygwin や WSL が使えない場合は、こちらをダウンロード・展開して使用します。ただし、arm-mingw32ce-windres が動作しません。使用にあたっては、付属の openTerminal.bat で起動したコマンドプロンプト上で使用するか、setting.bat の内容を参考に環境変数 PATH を設定するかのどちらかが必要です。

UNIX[]

作者の APT リポジトリを利用する場合[]

最も簡単、確実、高速な方法です。ただし、APT をパッケージ管理に用いる Linux ディストリビューション (Debianやその派生など) が必要で、パッケージも AMD64 用しか提供されていません。

[trusted=yes] は Ubuntu では必須なため記載していますが、システムによっては不要な場合があるので適宜取り除きます。

sudo bash -c 'echo "deb [trusted=yes] https://max.kellermann.name/debian cegcc_buster-default main" > /etc/apt/sources.list.d/gcc-arm-mingw32ce.list'sudo apt updatesudo apt install gcc-arm-mingw32ce

終わったら arm-mingw32ce-g++ -v を実行し、以下のような出力が得られれば環境構築は完了です。コマンドが見つからない等のエラーが出た場合は、正しくインストールできていません。

Using built-in specs.COLLECT_GCC=arm-mingw32ce-g++COLLECT_LTO_WRAPPER=/usr/libexec/gcc/arm-mingw32ce/9.3.0/lto-wrapperTarget: arm-mingw32ceConfigured with: ../../../configure --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=arm-mingw32ce --disable-dependency-tracking --prefix=/usr --sysconfdir=/etc --with-gcc --with-gnu-ld --with-gnu-as --enable-threads=win32 --disable-nls --enable-languages=c,c++ --disable-win32-registry --disable-multilib --disable-interwork --without-newlib --enable-checking --with-headers --disable-__cxa_atexitThread model: win32gcc version 9.3.0 (GCC)

アンインストールは通常のパッケージと同様に行えます。必要に応じて、sudo apt autoremove による一掃や、/etc/apt/sources.list.d/gcc-arm-mingw32ce.list の削除も行います。

sudo apt remove gcc-arm-mingw32ce

コンパイル済みバイナリを使用する場合[]

APT を採用しないシステムでコンパイル済みバイナリを使用する方法です。

Debian 10 Buster AMD64、Ubuntu 20.04 AMD64、Intel Mac AMD64 から最も自身のシステムに近いものをダウンロードし、適当な場所に展開します。

必要に応じて PATH に追加します。以下はインストール先が /opt/cegcc であり、環境変数をシステムに設定する例です。なお、この場合設定の反映には ~/.profile の読み込みまたはシステムの再起動が必要です。

echo 'export PATH="$PATH:/opt/cegcc/bin"' >> ~/.profile

PATH を設定した場合は arm-mingw32ce-g++ -v、設定していない場合は (配置場所)/bin/arm-mingw32ce-g++ -v を実行します。これによって以下のような出力が得られれば環境構築は完了です。コマンドが見つからない等のエラーが出た場合は、正しくインストールできていません。

Using built-in specs.COLLECT_GCC=arm-mingw32ce-g++COLLECT_LTO_WRAPPER=/usr/libexec/gcc/arm-mingw32ce/9.3.0/lto-wrapperTarget: arm-mingw32ceConfigured with: ../../../configure --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=arm-mingw32ce --disable-dependency-tracking --prefix=/usr --sysconfdir=/etc --with-gcc --with-gnu-ld --with-gnu-as --enable-threads=win32 --disable-nls --enable-languages=c,c++ --disable-win32-registry --disable-multilib --disable-interwork --without-newlib --enable-checking --with-headers --disable-__cxa_atexitThread model: win32gcc version 9.3.0 (GCC)

ソースからビルドする[]

以上の方法が使えないシステムでは、ソースからビルドすることで自分のシステム用のコンパイラを生成することができます。ただし、Apple Silicon Mac ではコンパイルに失敗することが知られています。また、GCC は巨大なプログラムであるため、かなり時間が掛かります。性能にもよりますが、数時間はかかると思われます。

必要なパッケージを取得します。APT を用いないシステムでは、等価なものを適切な方法で取得してください。

sudo apt install git build-essential bison flex m4 libgmp-dev libmpc-dev libmpfr-dev texinfo

CeGCC のソースコードを取得します。Submodule 機能が使用されているため、--recursive を忘れないでください[1]。これには少し時間が掛かります。

cd /path/to/clonegit clone --recursive https://github.com/MaxKellermann/cegcc-build.gitcd cegcc-build

CeGCC をインストールするディレクトリを作成し、所有者を自身に設定して書き込めるようにします。以下のコマンドの /path/to/install をインストールしたい場所で置き換えてください。よく分からない場合は /opt/cegcc とします。自身のホームディレクトリ下に配置する場合は sudo 無しで mkdir すれば十分です。

sudo mkdir /path/to/installsudo chown "$(whoami):$(whoami)" /path/to/install

CeGCC のコンパイル中に使用するディレクトリを作成し、そこに移動します。通常は以下のコマンドで問題ありません。

mkdir /tmp/cegcc-outputcd /tmp/cegcc-output

いよいよ CeGCC をコンパイルします。これにはかなりの時間が掛かります。-j の直後には並行処理数を指定し、--prefix= の直後には先ほど作成したインストール先ディレクトリを指定します。以下は、並行処理数を論理コア数[2]、インストール先を /opt/cegcc とした例です。なお、このコマンドを実行する時点で、$OLDPWD がソースコードのディレクトリ (cegcc-build) を指している必要があります。以上の手順を順番に行っていればこれは満たされているはずですが、途中で異なる操作を行った場合は変化している可能性があるため、$OLDPWD の部分を cegcc-build のパスで置き換えます。システムによっては --prefix= に各種パッケージのパス等も指定する必要があります。

"$OLDPWD/build.sh" -j$(nproc) --prefix=/opt/cegcc

完了したら、以下の出力とともに終了します。取得したソースコード、パッケージ、一時ディレクトリは削除しても構いません。エラーメッセージの場合は、その内容を元に調整して再度やり直してください。やり直す場合は、一時ディレクトリとインストール先ディレクトリの中身を空に戻しておくことを推奨します。

DONE --------------------------

以降の流れは、前節のコンパイル済みバイナリを使用する場合と同じです。アンインストールはインストール先ディレクトリを削除することで可能です。必要に応じて PATH も戻します。

コンパイル[]

ソースコードがあるディレクトリで

arm-mingw32ce-g++ -Wall -Wextra -O3 -std=gnu++2a -march=armv5tej -mcpu=arm926ej-s -static -s -lcommctrl -lcommdlg -lmmtimer -o AppMain.exe (コンパイルするファイル).cpp

を実行すると AppMain.exe が生成されるので、これをアプリの起動方法に従って起動します。C 言語を用いる場合は g++、gnu++2a の部分をそれぞれ gcc、gnu2x に置き換えます。ソースコードの拡張子はもちろん .c になります。

補足[]

一般的な GCC の使い方はここでは説明しきれないので、別で調べてください。また、外部ライブラリを使う場合やリンカエラーが出た場合は、必要なライブラリファイルを -l(ライブラリ名) の形でコンパイルオプションに追加します。Windows API 関数がどのライブラリで提供されるかは、「関数名 Windows CE」で出てくる MS の記事の一番下に書いてあります。上記のコンパイルオプションでは頻繁に使用される commctrl, commdlg, mmtimer を既に追加してあります。

リソースの埋め込みは通常通り arm-mingw32ce-windres を使えば可能です。参考までに、コマンドライン引数として C/C++ ソースファイル名を受け取り、resource.rc があればそれもコンパイルしてバイナリを生成するスクリプトを掲載しておきます: C / C++

文字コードは UTF-8 を使用できます。また GCC 9.3.0 ベースなので C++17 に対応し、C++20 にも部分的に対応します。上のコンパイルオプションでは C++20 を有効化させています。

注意[]

ヘッダファイルは Windows PC のものを流用しているらしく、CE のものと定数が異なり変な挙動をすることがあります。例えば、最小化ボタンを表示させたはずが最大化ボタンが出たり、起動時に最大化するようにしたのに変化しなかったりします。Microsoft eMbedded Visual C++ 4.0Pocket GCC 等の他のコンパイラに付属のヘッダファイルを参考に直接書き換えたり、ソースコード中で定義し直したり、直接数値で指定したりして対応します。

なお、ソースコード中での再定義は windows.h をインクルードした直後に以下のように記述することで行えます。以下は一部を修正するのみですが、他の定数も同様にして修正できます。

#ifdef UNDER_CE#if SW_MAXIMIZE != 12#undef SW_MAXIMIZE#define SW_MAXIMIZE 12#endif#if SW_MINIMIZE != 6#undef SW_MINIMIZE#define SW_MINIMIZE 6#endif#if WS_MINIMIZEBOX != 0x00010000L#undef WS_MINIMIZEBOX#define WS_MINIMIZEBOX 0x00010000L#endif#if WS_MAXIMIZEBOX != 0x00020000L#undef WS_MAXIMIZEBOX#define WS_MAXIMIZEBOX 0x00020000L#endif#endif

オリジナルの CeGCC (非推奨)[]

デフォルトでは Windows CE 3.0 でも動くものが生成されます。Linux 環境にインストールするのが無難です。

まず、32-bit 版の libgmp と libmpfr をインストールします。64-bit 版 Linux でも 32-bit 版が必要です。次に、ARM 用の CeGCC を /opt 以下に展開し、各種環境変数を設定します。その後、ln -s を用いて libgmp.so.3 と libmpfr.so.1 のシンボリックリンクを作成します。

  1. --recursive 無しで実行した場合は submodule 部分が未取得の状態になります。これを修正するには、取得したディレクトリに入って git submodule update --init --recursive を実行します。
  2. これが最も無難な設定ですが、メモリ容量がコア数に対して小さい環境では並行処理数を減らした方が効率が良いなど、環境によって最適な設定は異なります。


特に記載のない限り、コミュニティのコンテンツはCC BY-SAライセンスの下で利用可能です。

シェアボタン: このページをSNSに投稿するのに便利です。


最近更新されたページ

左メニュー

左メニューサンプル左メニューはヘッダーメニューの【編集】>【左メニューを編集する】をクリックすると編集できます。ご自由に編集してください。掲示板雑談・質問・相談掲示板更新履歴最近のコメントカウン...

音楽を聴く

目次1 Xaudio MP3 Player2 Nitrogen3 Winamp3.1 導入3.2 使い方3.2.1 メニューの項目3.2.2 スキンの適用3.2.3 イコライザー3.2.4 プレイリス...

電子辞書を買う、その前に

このページでは、進学して初めて電子辞書を購入される方、新しい機種に乗り換える方のために、それぞれのニーズに合わせた電子辞書を紹介していきます。特に最近の Brain は Windows CE を活用す...

開発者用ツール

開発者用ツール.pngここでは、Brain 上で動作する開発者用ツールを紹介しています。Brain 用ソフトウェア開発には、開発環境・SDK も参照してください。ソフト名できること備考Scalpelシ...

開発環境・SDK

注意: 2021年に発売された第5世代に該当するモデルで動作するアプリの作成方法は、現状不明です。詳細はこちら。開発環境[]各開発環境の環境構築や使い方などの詳細については、それぞれのリンク先の記事を...

記号・日本語の入力方法

Brain にはキーボードがありますが、辞書を引くための最低限のキーしか搭載されておらず、数字や記号を入力することができません。また、IME が搭載されていないため辞書アプリ外では日本語入力もできませ...

第5世代

第5世代機の発売日当日、突如として Brain Library に現れたポップアップ。多くの憶測を呼んだ。2021 年、例年より少し遅れて、見た目は PW-Sx7 とほぼ何の違いもない PW-S1, ...

第4世代

この世代では、PW-SB5 以降の大学生・ビジネス向けモデル (PW-SB 系) を除く機種に非公式アプリの起動プロテクトが掛かるようになりました。また、PW-Sx7 ではさらに強化したプロテクトが導...

第3世代

対象型番[]発売時期中学生高校生学校専売大学生ビジネス生活·教養シニアその他2014年前半SJ1SH1HC4SB1SA12014年後半SR12015年前半SJ2SH2HC5SB2SA22015年後半2...

第2世代

対象型番[]発売時期中学生高校生学校専売大学生ビジネス生活·教養シニアその他2012年前半G4200G5200HC2A9200A72002012年後半A7300GX5002013年前半G5300HC3...

第1世代

対象型番[]発売時期中学生高校生学校専売大学生ビジネス生活·教養シニアその他2008年後半AC880AC830TC9802009年前半GC590AC8902009年後半AC9002010年前半GC61...

倉庫番

Warehouse Guy プレイ画面グループゲーム開発者True DimensionsDLLmfcce211.dll1982 年に PC-8801 向けにリリースされて以降、30 年以上に渡って遊ば...

リンク集

Brain 用ソフトウェア開発者[]KnatechceOpener、KN PDF Reader など。川本優Task Switcher など。ソースコードはこちらで配布されています。lycorisON...

リバーシ

かつてはブレーンライブラリーで追加コンテンツとして「リバーシ」が販売されていましたが、削除されてしまいました。しかし、まだフリーソフトでリバーシを遊ぶことができます。目次1 Reversi1.1 操作...

ユーティリティ

便利ツール-0.pngソフト名解説備考Garmap CE(直リンク)オフライン地図アプリです。MioPocket の System に入れ、AYGSHELL.DLL を CE5 からコピーします。別途...

メガドライブエミュレータ

1988 年に当時のセガ・エンタープライゼスより発売された、据え置き型家庭用ゲーム機メガドライブのエミュレータの解説です。自由な利用と頒布が許諾されていない ROM のダウンロードは著作権侵害により罰...

ミニッツマスコット

ミニッツマスコット デフォルトのキャラクターは「耳長メイドのらんぷさん」グループユーティリティ利用用途デスクトップマスコット開発者上野智弘DLL不要デスクトップ常駐型のキャラクター表示アプリといえば、...