Android编译lua-5.4.1

Android编译lua-5.4.1

我的目标是编译一个在android上的一个lua解释器

环境

NDK版本为21.1.6352462

CMake版本为3.15.0

lua源码为5.4.1

ninja版本1.8.2

过程

我打算直接使用CMake命令生成ninja的工程文件,然后使用ninja命令进行编译,由于lua源码是使用Makefile,需要添加一个CMakeLists.txt文件

1 CMakeLists.txt

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# NDK版本需要大于21否则缺少函数
set(ANDROID_NATIVE_API_LEVEL 21)
# 使用NDK的toolchain进行编译
include(C:/Users/Tbolp/AppData/Local/Android/Sdk/ndk/21.1.6352462/build/cmake/android.toolchain.cmake)


cmake_minimum_required(VERSION 3.12)

project(lua-5.4.1)

add_executable(lua-5.4.1
src/lapi.c
src/lcode.c
src/lctype.c
src/ldebug.c
src/ldo.c
src/ldump.c
src/lfunc.c
src/lgc.c
src/llex.c
src/lmem.c
src/lobject.c
src/lopcodes.c
src/lparser.c
src/lstate.c
src/lstring.c
src/ltable.c
src/ltm.c
src/lundump.c
src/lvm.c
src/lzio.c
src/lauxlib.c
src/lbaselib.c
src/lcorolib.c
src/ldblib.c
src/liolib.c
src/lmathlib.c
src/loadlib.c
src/loslib.c
src/lstrlib.c
src/ltablib.c
src/lutf8lib.c
src/linit.c
src/lua.c)

2 编译

生成build.ninja

1
cmake . -G Ninja

编译文件

1
ninja

成功后会生成一个lua-5.4.1的文件

3 运行

需注意普通目录没有运行权限,需要将文件放入/data/local/tmp目录运行

1
2
3
4
5
6
7
8
9
10
11
adb devices -l

adb push lua-5.4.1 /data/local/tmp

adb shell

cd /data/local/tmp

chmod u+x lua-5.4.1

./lua-5.4.1

最后可以看到进入了lua交互中

文档

https://cmake.org/cmake/help/v3.19/manual/cmake-toolchains.7.html#cross-compiling-for-android

https://cmake.org/cmake/help/v3.19/manual/cmake-commands.7.html

https://bbs.pediy.com/thread-213564.htm