android 编译luajit,Android 嵌入 LuaJIT 的曲折道路

相关链接:Windows 下编译 LuaJIT

懒人与伸手党可以直接看最底部。

为什么使用 LuaJIT

Lua 官方版的编译嵌入相对简单,但是为什么要用 LuaJIT 呢?我所了解到的优势有:

更高的运行效率。

支持运行 Lua 编译后的机器码。

虽然 Lua 也支持编译脚本,但是编译出来的机器码文件并不是跨平台的,也就是说在

PC 上编译的脚本在 Android 中无法使用。至于如何编译 Android 上使用的脚本,至今没有找到方案。

脚本的编译不仅可以提高载入速度,更可以一定程度上保护源码,避免被篡改。这也是我使用 LuaJIT 的主要原因。

LuaJIT NDK 编译

系统环境:Ubuntu 17 x64

Windows 下使用 Cygwin 应该也是可以的。

由于我们系统是64位,编译的目标很可能是32位的,所以先确认安装了32位所需的编译环境:

sudo apt-get install libc6-dev-i386

NDK 配置

已经配置好 NDK 的可以略过本章节。

去 NDK 官网下载适合自己的版本并解压。这里使用的是 android-ndk-r14b-linux-x86_64.

解压放在 /opt/android/ndk.

然后配置环境变量。这里直接配置全局的环境变量。修改 /etc/proile 在最后加上

export PATH=/opt/android/ndk:$PATH

注销重新登录一下使之生效。测试下命令 ndk-build,能运行则是配置完毕。

编译

首先去 LuaJIT 官网下载源码并解压。

按照官方指南,新建一个 build.sh 放在解压目录下,根据实际需求输入指令:

注意根据实际环境配置,有几个地方需要修改一下。

然后执行 sh build.sh 就应该可以编译了。

但是实际情况总是没有那么顺利。

ec181ab570b5eafccf85dca5a1ef9276.png

折腾了3天,最后发现原来是变量引用问题。我不是很熟悉 shell,所以也就不再深究了,直接把 make 的所有参数写在一行里,就这么神奇地成功了。

如果之前编译(失败)过,记得先 make clean 清理下文件。编译成功后可看到如下提示:

df50df86dbd98691469321114558a86b.png

之后可以在 src 目录里找到编译出的 .a 静态库文件。通过改变编译脚本,可以编译出 armeabi-v7a x86 等不同 ABI 下的文件。

整合 Android

得到了静态库,下面就要整合进 Android 工程。由于 Lua 只提供的 C API,所以在 Android 中需要通过 JNI 来实现调用。还好有个 luajava 的开源库帮我们实现了这个繁琐的过程。而 androlua 又把 luajava 整合进了 Android. 我们这里是借用这个库来整合 LuaJIT.

导入 luajava 源码

创建 jni/luajava/ 目录,将 luajava.c 复制到创建的目录。

在 jni/ 下创建 Android.mk,输入 include $(call all-subdir-makefiles).

导入 LuaJIT 静态库

在 jni/luajava/ 下根据 ABI 创建子目录,例如 armeabi-v7a x86,将之前编译出的 .a 文件放进对应的目录中。

在 jni/luajava/ 下创建 Android.mk,输入:

将需要的头文件复制到 jni/luajava/ 目录。

包括:lauxlib.h lua.h lua.hpp luaconf.h luajava.h luajit.h lualib.h

这些文件可以在 LuaJIT 的源码目录找到。

最后在模块的 build.gradle 文件的 android->defaultConfig 节点内添加下面代码:

编译完成后就可以愉快地使用 LuaJIT 了。

源码与懒人必备

源码已经在 github 了。

并且传到了 JCenter,无需自己编译,直接添加依赖就可以使用:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/454584.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

运维自动化之使用PHP+MYSQL+SHELL打造私有监控系统(一)

前言 记得刚来这家公司的时候,我部门就我一个运维工程师,然后就是经理,刚开始公司平台什么监控都没有,在我与经理的努力下,先搭建nagioscacti监控平台,后来随着公司业务的增加,平台的功能与服务…

Redis Python

Python操作Redis 安装Python使用Redis的库 sudo pip install redis or sudo easy_install redis or 源码安装 详见:https://github.com/WoLpH/redis-py 1.1 操作模式 redis-py提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大…

js更新数组对象_7 种Vue 数据已更新而页面没有更新的情况及深化总结(收藏)

作者:前端1943链接:https://segmentfault.com/a/1190000022772025如果你发现你自己需要在 Vue 中做一次强制更新,99.9% 的情况,是你在某个地方做错了事。1. Vue 无法检测实例被创建时不存在于 data 中的 property原因:…

从P560小型机B181201B故障代码识别手把手详解

背景:生产小型机发生宕机事件,现场发现液晶面板存在B181201B代码,可是查看网络,未见有权威的参考文章,通过管理口登录HMC管理界面,发现错误代码B181201B,同时提示可能是电源故障,后登…

Python 之 线程

进程 之前我们已经了解了操作系统中进程的概念,程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程。程序和进程的区别就在于:程序是指令的集合,它是进程…

flymcu无法打开串口_西门子1200与其他PLC/组态软件无线串口通讯(自由口)

一、控制系统原理图1:控制系统原理二、硬件需求S7-1200 PLC目前有3种类型的CPU:1)S7-1211C CPU2)S7-1212C CPU3)S7-1214C CPU这三种类型的CPU都可以连接三个串口通信模版本例中使用的PLC硬件为:1)PM1207电源(6EP1 332-1SH71)2)S7-1214C(6ES7 214-1BE30-0…

收银管理系统怎样帮助商家很好地经营服装门店

收银管理系统对于服装门店的经营可以提供多方面的帮助,以下是一些具体的优势和功能: 1. 快速准确的收银:收银管理系统可以实现快速、准确的收银操作,通过条码扫描或手动输入商品信息,自动计算价格并生成收据。这样可以…

Python 之 进程

目录 理论知识 操作系统背景知识 进程 什么是进程 进程调度 进程的并行与并发 同步异步阻塞非阻塞 同步和异步 阻塞与非阻塞 同步/异步与阻塞/非阻塞 组合 进程的创建与结束 进程的创建 进程的结束 在python程序中的进程操作 multiprocess(multiproc…

metric learning -- 马氏距离与欧氏距离

一 基本概念 方差:(variance)是在概率论和统计方差衡量随机变量或一组数据时离散程度的度量。概率论中方差用来度量随机变量和其数学期望(即均值)之间的偏离程度。统计中的方差(样本方差)是每个…

深入理解 C# 协变和逆变

msdn 解释如下: “协变”是指能够使用与原始指定的派生类型相比,派生程度更大的类型。 “逆变”则是指能够使用派生程度更小的类型。 解释的很正确,大致就是这样,不过不够直白。 直白的理解: “协变”->”和谐的变”…

华为mate20能用鸿蒙吗,华为mate20可以用5g网络吗

华为mate20不可以用5g网络,它是4g手机在2018年上市,当时5g并没有开始流行,因此mate20是不支持5G的。不过在后来的2019年秋季,华为发布了mate20 x的5g版本,这也是mate20系列里唯一支持5G的,除此之外mate20、…

基本农田卫星地图查询_#重庆朝天门#谷歌百度腾讯高德“卫星地图”PK,谷歌更胜一筹...

截图自便民查询网,各家卫星地图PK,各有千秋~谷歌精确度最高:5m,来福士修建中,嘉陵江是绿的,长江是黄的。两江交汇处有一条分明的界线。谷歌 5m:20ft谷歌 50m:100ft谷歌 200m:500ft谷歌 300m:1000ft谷歌 500…

Python 第三方库之 Celery 分布式任务队列

一、Celery介绍和使用: Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以考虑使用celery, 举几个实例场景中可用的例子: 你想…

windows server 2008 (五)web服务器的搭建和部署

Windows server 2008 web服务器的搭建和部署相对于windows server 2003的IIS6来说,windows server 2008推出的IIS7.0为管理员提供了统一的web平台,为管理员和开发人员提供了一个一致的web解决方案。并针对安全方面做了改进,可以减少利用自定义…

改装摩托车

摩托车发动机就是将进入气缸中的燃料混合气点燃使其燃烧所产生的热能变为机械能,并由曲轴将动力通过传动机构传给摩托车后轮而变为车辆行驶动力的机械。发动机的进排气量和气流速是影响高转速(功率)输出的关键因素之一。 发动机工作时气流的路…

华为鸿蒙os logo,华为鸿蒙OS Logo曝光:Powered by HarmonyOS

IT之家 9 月 13 日消息 9 月 10 日,鸿蒙 OS 2.0 亮相华为开发者大会的主舞台上,华为常务董事、消费者业务 CEO 余承东表示,鸿蒙 OS 是首个真正为全场景时代打造的分布式操作系统,鸿蒙 OS 2.0 全面使能全场景生态。现在博主 勇气数…

python判断语句_详解Python判断语句的使用方法

本篇介绍Python判断语句的使用,主要讨论简单条件语句、多重条件语句和嵌套条件语句,在讲解的每个案例中都配有流程图和代码说明。通过本篇的学习,可以达成如下目标。 ● 掌握判断语句的使用规则 ● 判断语句流程图的画法 前面我们学习了Pytho…

js setTimeout 使用方法

在项目过程中遇到一些异步加载和其他js方法冲突的问题: 如图初始化的时候会加载“商户基本信息”,修改商户名称字段第二个页面也需要修改: function setSeqAndName(){var pritab2 $("#allTabs").tabs("getTab", 1).find("ifra…

机器学习算法之 logistic、Softmax 回归

逻辑回归本质是分类问题,而且是二分类问题,不属于回归,但是为什么又叫回归呢。我们可以这样理解,逻辑回归就是用回归的办法来做分类。它是在线性回归的基础上,通过Sigmoid函数进行了非线性转换,从而具有更强…

程序员成功之路

程序员成功之路 ——The road ahead for programmer(演讲稿) 一、我很羡慕在座的各位同学,因为你们是中国未来的程序员,而我不是,我一直很遗憾。 比尔盖茨曾经写过一本书叫做《未来之路》The road ahead, 那么今天我选…