Luaソースのダウンロード
Luaの最新版ソース(5.2.0)を下記よりダウンロードする。
Luaソースの配置
Android ProjectのjniフォルダにLuaのソース一式(*.c, *.h, *.hpp)をコピーする。自分は、jniの下にluaというフォルダを作ってそこに入れている。Android ProjectやNDKのセットアップ等の説明はここでは省略。
Android.mk、Application.mkを作成
Android.mk
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_ARM_MODE := arm LOCAL_MODULE := lua LOCAL_SRC_FILES := \ lua/lapi.c lua/lcorolib.c lua/ldump.c lua/llex.c lua/lopcodes.c lua/lstrlib.c lua/luac.c \ lua/lauxlib.c lua/lctype.c lua/lfunc.c lua/lmathlib.c lua/loslib.c lua/ltable.c lua/lundump.c \ lua/lbaselib.c lua/ldblib.c lua/lgc.c lua/lmem.c lua/lparser.c lua/ltablib.c lua/lvm.c \ lua/lbitlib.c lua/ldebug.c lua/linit.c lua/loadlib.c lua/lstate.c lua/ltm.c lua/lzio.c \ lua/lcode.c lua/ldo.c lua/liolib.c lua/lobject.c lua/lstring.c include $(BUILD_SHARED_LIBRARY)
APP_OPTIM := release APP_STL := stlport_static
ビルド
$ ndk-build clean all
/Volumes/Share/jun/eclipse_workspace/LuaGL/jni/llex.c: In function 'trydecpoint': /Volumes/Share/jun/eclipse_workspace/LuaGL/jni/llex.c:214: error: 'struct lconv' has no member named 'decimal_point'
Luaは、C標準ライブラリのlocal.hで定義されているlconv構造体のdecimal_pointメンバを参照しているが、Android環境のlocal.hにはその定義がないようだ。このdecimal_pointには小数点を表す文字が入っており、たいてい「.」(ピリオド)なのでここでは直に入れてしまおう。llex.cの202行目付近を下記のように修正する。
#if !defined(getlocaledecpoint) //#define getlocaledecpoint() (localeconv()->decimal_point[0]) #define getlocaledecpoint() '.' #endif
再度ビルドすれば通るはずだ。libs/armeabi/liblua.soが出来てればOK。
