Raspberry Pi Desktop for PC で、LuaAppMaker をビルドしました。いろいろ未完成だけど、一応できた。
まず、wxWidgets をビルドする。なるべく新しい方がよかろう、ということで、この機会に 3.1.5 に上げました。Mac 版は 10.11 以降のみ対応となります。10.6〜10.10 のために、3.0.3 を使った Legacy バージョンも作ります。以下、Raspberry Pi Desktop for PC でのビルド。
$ cd path/to/wxWidgets-3.1.5
$ sudo apt install libgtk-3-dev # gtk3 のビルド用
$ sudo apt install freeglut-dev # OpenGL に必要
$ sudo apt install libwebkit2gtk-4.0-dev # wxWebView に必要
$ export BASEDIR=$PWD
$ mkdir build-debian; cd build-debian
$ ../configure --disable-shared --enable-monolithic --prefix=$BASEDIR/build-debian | tee configure.log
$ make | tee make.log
$ make install
できました。build-debian/lib
以下にライブラリが入っている。
LuaJIT-2.1.0-beta3 のビルドは、特に問題はなかった。ただし、デバッグ中に判明した問題点として、エラーメッセージの中にマルチバイト文字(ファイル名など)が入っているとき、短縮して不正な文字列になるケースがあったので、パッチを当てる必要があった。これは Mac でも Windows でも当てはまる問題なので、見つかってよかった。
--- lj_debug_orig.c 2021-09-03 23:09:40.000000000 +0900
+++ lj_debug.c 2021-09-03 23:55:57.000000000 +0900
@@ -327,6 +327,7 @@
src++; /* Skip the `@' */
if (len >= LUA_IDSIZE) {
src += len-(LUA_IDSIZE-4); /* Get last part of file name. */
+ while (*src != 0 && (*src & 0xc0) == 0x80) src++; /* Skip UTF-8 non-boundary chars */
*out++ = '.'; *out++ = '.'; *out++ = '.';
}
strcpy(out, src);
@@ -337,6 +338,7 @@
strcpy(out, line == ~(BCLine)0 ? "[builtin:" : "[string \""); out += 9;
if (src[len] != '%%%%% BODY %%%%%') { /* Must truncate? */
if (len > LUA_IDSIZE-15) len = LUA_IDSIZE-15;
+ while (len > 0 && (src[len] & 0xc0) == 0x80) len--; /* Skip UTF-8 non-boundary chars */
strncpy(out, src, len); out += len;
strcpy(out, "..."); out += 3;
} else {
LuaAppMaker のビルドは、リンクするライブラリを網羅するのに手間取った。wx-config --libs
とやっても、なんか漏れがあるんだよね。あと、引っかかったのが、せっかく LuaJIT を自前でビルドしたのに、システムの libluajit-5.1
がリンクされてしまうこと。リンク時に -L
で指定しても、実際に探すときはライブラリのロードパスを探してしまうので、うまくいかない。 -Wl,-rpath='$$ORIGIN/lib'
を指定することで解決した。こうすると、実行ファイルのあるディレクトリ直下の "lib" をライブラリのサーチパスに加えてくれる。
一応実行ファイルがビルドできた。ターミナルから起動すると実行できるんだけど、デスクトップでダブルクリックすると「共有ライブラリです」と言われる。なんで?
イマドキの Linux アプリは AppImage という形式にするのがよさそう。ライブラリの依存関係も全部込みで、実行形式のファイル1個で、いろいろなディストリビューションに対応しているらしい。次はこれにチャレンジだな。