「LuaAppMaker の AppImage を作る (wxWebView オプショナル版)」の続きです。AppImage の公式ドキュメントによれば、「現在サポートされているできるだけ古い Linux システムでビルドすることが望ましい」とされています。
It is considered best practice to develop and compile the application on the oldest still-supported Linux distribution that we can assume users to still use. For example, the oldest still-supported LTS release of Ubuntu is a good choice to develop applications against and build applications on.
Concept - AppImage Document
そこで、Ubuntu 14.04 でビルドしてみました。結論から言うと、うまくいかなかったんですが。
wxWidgets 3.1.5, LuaJIT-2.1.0-beta3, wxLua のビルドは、まあ問題なかったのですよ。EGL 絡みでエラーが出て、EGL のサポートを外したりもしたけど、それは大きな問題じゃない。問題は、前回やった「LuaAppMaker 本体を共有ライブラリとしてリンクして、wxwebview.so
を作る」という段階。こんなエラーが出る。
/usr/bin/ld: /mnt/hgfs/wxMyProjects/LuaAppMaker/build-ubuntu/build/debug/wxwebview.so: シンボル _ZTVN10__cxxabiv121__vmi_class_type_infoE@@CXXABI_1.3 用のバージョンノードが見つかりません
gcc が古い(バージョン 4.7)からかな?と思い、gcc-8 をインストールしてみた。また、ld (binutils) が古いのかな?と思い、最新の 2.37 をビルドしてみた。どちらもダメ。エラーメッセージは少し変わった。
/usr/local/bin/ld: LuaAppMaker: _ZTVN10__cxxabiv117__class_type_infoE: 無効なバージョン 10 (最大 0) LuaAppMaker: error adding symbols: 不正な値です
リンク時の「シンボルのバージョン」と関係しているらしい、というところまでは判ったけど、そこから先にどうしても進めない。英語のエラーメッセージは invalid version 10 (max 0)
となっていて、これで検索するとたくさん情報が出てくるのだが、今回の問題の解決につながるような情報がまだ見つかってない。
試しに Debian 9 (Stretch) でもビルドしてみた。こっちは通るんですよ。gcc の設定なども少し異なるようなんだけど、どこが効いているのか全然わからない。
一つ違いを見つけた。LuaAppMaker の実行ファイル中のシンボルを readelf
で読んで、上でエラーが出たシンボルを抽出してみる。Debian 9 ではこうなる。
$ readelf -Ws build/release/LuaAppMaker/LuaAppMaker | grep __class_type_info
567: 00000000 0 OBJECT GLOBAL DEFAULT UND _ZTVN10__cxxabiv117__class_type_infoE@CXXABI_1.3 (12)
一方、Ubuntu 14 ではこうなる。
$ readelf -Ws build/release/LuaAppMaker/LuaAppMaker | grep __class_type_info
7874: 0126891c 44 OBJECT WEAK DEFAULT 23 _ZTVN10__cxxabiv117__class_type_infoE@CXXABI_1.3 (10)
45559: 0126891c 44 OBJECT WEAK DEFAULT 23 _ZTVN10__cxxabiv117__class_type_infoE@@CXXABI_1.3
Debian ではこのシンボルは UND
(未定義)のままなのだが、Ubuntu14 ではアドレスが決まっている。どちらが正しいのかわからない。
現時点の自分の実力では、これ以上踏み込むのは無理だと思う。今回は諦めて、Debian 9 で AppImage を作ることにした。まあ、主要なターゲットは Raspberry Pi OS で Debian 系なので、問題ないとも言える。