2008-09-21

CeGCC で Windows Mobile 用にクロスコンパイル

WinCE (Windows Mobile) のクロスコンパイラを Linux (Fedora 9) で使ってみました。

SourceForge.net: CeGCC - Cross development for Pocket PC

簡単なプログラムを用意します。

#include <windows.h>

int WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPWSTR pCmdLine, int showCmd)
{
MessageBoxW(NULL, L"こんにちは、世界", L"メッセージ", MB_OK);
return 0;
}

hello.c というファイル名で保存し、コンパイルをします。

$ arm-wince-mingw32ce-gcc -s -o hello.exe hello.c

生成したバイナリを Windows へ移し、WinCE (Windows Mobile) 用のエミュレータで実行してみます。

ちゃんと動作しました。ちょっと感動。

関連情報


[1] Windows Mobile ダウンロード
 

2008-09-20

MinGW runtime と w32api(つづき2)

SourceForge.net Logo
しぶりにリリースされた MinGW runtime と w32api ですが、コンパイルがうまくいかない不具合に遭遇しましたので、一旦、[Under testing] のカテゴリに移しました。その後、いろいろ試し、ようやく以前と同じようにコンパイルすることができました。一部のパッケージのコンパイル時に以下のコンパイル・フラグを追加しています。

make CFLAGS="-D__USE_MINGW_ANSI_STDIO=0"

新しい MinGW runtime のパッケージで付加された機能を無効にしてコンパイルすることに釈然としないものがありますが、全部のパッケージに必要なフラグではありませんので、このまま、パッケージの再コンパイルを始めています。
 

2008-09-13

MinGW runtime と w32api(つづき)

SourceForge.net Logo
久しぶりに更新された MinGW runtime と w32api ですが、Glib をコンパイルできないという不具合に遭遇しました。MinGW runtime の更新した箇所は、リリースノートによると次の様になっています。

Notes:
New features in release 3.15
============================

* Package names have been rationalised, to clearly identify the supported
OS platform as `mingw32'; the generic package name has been shortened
from `mingw-runtime' to `mingwrt'.

* The MinGW DLL, for threads support, has been made available in a
package qualified by the `dll' suffix, separately from the development
headers and libraries, which may be found in the package qualified by
the `dev' suffix; as previously, source code is provided in the package
qualified by the `src' prefix.

* A replacement implementation for MinGW's snprintf() and vsnprintf()
functions is provided; this further extends the scope of replacement
to include printf(), fprintf(), sprintf(), vprintf(), vfprintf()
and vsprintf() featuring:--

- Full support for *all* of the *standard* format conversion specs
mandated by ISO-C99 and POSIX, (excluding POSIX-XSI extensions).

- Microsoft's non-standard format conversion specs also supported.

- Correct formatting of values with MinGW's long double data type.

- Microsoft's convention of printing at least three exponent digits,
for "%e" format, (and for "%g" when appropriate), is retained as
default; support for _set_output_format(_TWO_DIGIT_EXPONENT) is
included, for users of MSVCR80.DLL (and later).

- Users preferring the ISO-C99/POSIX standard of only two exponent
digits may set PRINTF_EXPONENT_DIGITS=2, in the environment; this
capability is supported by all of the MinGW replacement functions
named above, and overrides all Microsoft specific conventions, for
users of all versions of MSVCRT.

As in previous releases, the MinGW implementations of snprintf() and
vsnprintf() are the default for these two functions, with the MSVCRT
alternatives being called as _snprintf() and _vsnprintf().

In the case of the other six replacement functions, MSVCRT provides
no underscore decorated name by which they may be invoked; thus, the
MSVCRT implementation for these remains the default. To enable the
MinGW replacements for these six functions, users may employ any one
(or more) of the following, (and *must* #include stdio.h):--

- Include the `-posix' option, in the GCC command, when compiling.

- Compile with the `-ansi' option, or any of the `-std' options
which causes __STRICT_ANSI__ to be defined.

- Define any of __STRICT_ANSI__, _ISOC99_SOURCE, _POSIX_SOURCE,
_POSIX_C_SOURCE, _GNU_SOURCE, _BSD_SOURCE, _SVID_SOURCE,
_XOPEN_SOURCE or _XOPEN_SOURCE_EXTENDED, *before* including
*any* system header file, and in particular stdio.h, (which
*must* be included).

- Define __USE_MINGW_ANSI_STDIO with a non-zero value, *before*
including *any* system header file.

- Define __MINGW_FEATURES__ to represent any odd valued unsigned
long long integer, (i.e. __MINGW_FEATURES__ & 0x1ULL == 0x1ULL),
*before* including *any* system header file.

N.B. *All* of the above techniques, which induce the selection of
the MinGW replacement functions may be overridden, by *explicitly*
defining __USE_MINGW_ANSI_STDIO as zero, *before* including *any*
system header file.

When the MinGW replacement functions have been selected, by any of
the above methods, the original MSVCRT function may be invoked by
prefixing `__msvcrt_' to the function name, e.g. __msvcrt_printf().

* A replacement implementation for the getopt() family of functions,
adding support for the GNU getopt_long_only() function. Users
should note that this intentionally *removes* support for the BSD
or Mac OS-X specific, and non-standard, `optreset' global variable;
to reset the getopt() scanner, use `optind = 0;' instead of relying
on this non-standard, non-portable and now-unsupported feature.

(以下略)

snprintf() と vsnprintf() をいじっているようですが、(従来と同様に)オプションなしで Glib コンパイルすると、まさにこれらの関数を利用する箇所でコンパイルがコケます。いくつかコンパイルにマクロを定義してトライしてみましたが、最後までコンパイルできません。MinGW のメーリングリストをちゃんと読んでおらず、今回の変更の背景が分かりませんし、今までの MinGW runtime では普通にコンパイルできていたので、とりあえず、新しい MinGW runtime と w32api を [Under testing] のカテゴリに移しました。
 

2008-09-12

MinGW runtime と w32api

SourceForge.net Logo
MinGW - Minimalist GNU for Windows のサイトで、9 月 8 日、MinGW-RuntimeMinGW API for MS-Windows の新しいバージョンがリリースされました。

今回のリリースでは、ファイルの名付けルールが変更されていました。

(前リリース)
mingw-runtime-3.14-src.tar.gz
w32api-3.11-src.tar.gz

(新リリース)
mingwrt-3.15-mingw32-src.tar.gz
w32api-3.12-mingw32-src.tar.gz

今頃になって対象の OS を明示するために 'mingw32' がファイル名に加えられました。その上、runtime は rt と短く表記されるようになっています。

大昔、MinGW のクロスコンパイラのパッケージを作り始めたころ mingw32 というプレフィックスが付いたパッケージ名を使っていましたが、それを mingw に直した経緯があるので、再び戻そうかどうか検討しました。


現在のところ、64 bit Windows 向けの mingw-w64 プロジェクトのパッケージをクロスコンパイル用に生成する予定がないので、混乱を避けるため、クロスコンパイラの方では、以下の様に、名付けルールは今回変更しないことにしました。

mingw-runtime-3.15-1.fc9.x86_64.rpm
mingw-w32api-3.12-1.fc9.x86_64.rpm

本家 MinGW のサイトで 64 bit Windows 向けにパッケージが公開されるようになれば、あらためて対応を考えます。

Fedora Linux 上で利用できるクロスコンパイル用 RPM パッケージのダウンロードは以下からどうぞ。

MinGW Cross Compiler
 

2008-09-07

Wine で動作するソフトウェア


CentOS5 に Wine を導入し、Wine の動作確認をひたすら行うブログ、というサイトを見つけました。Wine で日本語環境で動作する Windows 用のソフトウェアの動作を検証しています。

活動は地味だけど、日本語に関する設定など役に立つ情報もあります。今年1月の短い期間に書き込みがされてから更新がされていないページですが、ますます情報が豊富になることを期待してブックマークをしておきました。

関連情報


[1] Wine HQ
[2] Wine AppDB - Wine Application Database
 

2008-09-06

Lua をクロスコンパイル

 
SourceForge.net Logo

くてパワフルな手続き記述型プログラミング言語 Lua を、Windows 用に、Linux 上でクロスコンパイルしてみました。Lua のバージョンは 5.1.4 です。zip で圧縮して、わずか 250Kbyte 程度のサイズです。とても小さいです。シフト JIS に対応するパッチが存在しているようですが、クロスコンパイルして生成したバイナリでは、対応する予定はありません。

Lua に関して詳しくは知らないのですが、バイトコードに変換しているし、組み込み可能なスクリプト言語というところに惹かれます。まずは Lua の情報を集め、クロスコンパイルした Lua で遊んでみようと思います。

ちなみに、Lua という名前は、ポルトガル語で月という意味で、このプログラミング言語に対しては、最初を大文字、あとは小文字で Lua と表記するのが正しいのだそうです。リオデジャネイロ・カトリカ大学の情報工学科コンピュータグラフィックステクノロジーグループ TeCGraf によって設計開発されました。

関連情報


[1] The Programming Language Lua
[2] Lua: license
[3] LuaForge: Welcome
[4] Kepler: Overview
[5] Lua - Wikipedia
[6] lua-users wiki: Lua Unicode
[7] Lua@空想具現化プログラミング
 

2008-09-05

【備忘録】PreUpgrade


PreUpgrade は Fedora 9 に収録されている、オンラインでシステムのアップグレードができるアプリケーション。インストールされているバージョンは、0.9.3 で、まだ開発中のもののようです。

次期 Fadora 10 のリリーススケジュールは、現在のところ 9 月 9 日にベータ、10 月 28 日には Preview、11 月 18 日には正式版となっています。PreUpgrade のバージョン番号がまだ若いので心配もありますが、Preview リリースあたりで利用できるのであれば、試してみようと思う。

関連情報


[1] Features/PreUpgrade
[2] PreUpgrade - Trac