章鱼lua扩展模块
来源:互联网 发布:淘宝不搜血滴子上一句 编辑:程序博客网 时间:2024/06/11 20:57
1.安装ndk并设置环境变量
2.切换到project/jni目录下运行ndk-build
注意:需要把so放到某个目录中,我这里是 /data/local/tmp !!!
例如: adb push mytestlib.so /data/local/tmp
效果图
相关文件
mytestlib.c文件
//lua核心API声明#include "lua.h" //lua辅助库API声明#include "lauxlib.h" //lua库声明#include "lualib.h"// 待注册的C函数,该函数的声明形式在上面的例子中已经给出。 static int add(lua_State *L) { double op1 = luaL_checknumber(L,1); double op2 = luaL_checknumber(L,2); lua_pushnumber(L,op1 + op2); return 1;} static int sub(lua_State *L){ double op1 = luaL_checknumber(L,1); double op2 = luaL_checknumber(L,2); lua_pushnumber(L,op1 - op2); return 1;}// luaL_Reg结构体的第一个字段为字符串,在注册时用于通知Lua该函数的名字。// 第一个字段为C函数指针。// 结构体数组中的最后一个元素的两个字段均为NULL,用于提示Lua注册函数已经到达数组的末尾。static const luaL_Reg mylibs[] = { {"add", add}, {"sub", sub}, {NULL, NULL} }; // 该C库的唯一入口函数。其函数签名等同于上面的注册函数。见如下几点说明:// 1. 我们可以将该函数简单的理解为模块的工厂函数。// 2. 其函数名必须为luaopen_xxx,其中xxx表示library名称。Lua代码require xxx需要与之对应。// 3. 在luaL_register的调用中,其第一个字符串参数为模块名xxx,第二个参数为待注册函数的数组。// 4. 需要强调的是,所有需要用到xxx的代码,不论C还是Lua,都必须保持一致,这是Lua的约定,// 否则将无法调用。extern int luaopen_mytestlib(lua_State *L) { luaL_newlib(L, mylibs); //_G["mytestlib"]= mylibs 可选择 lua_pushvalue(L, -1); lua_setglobal(L, "mytestlib"); /* the module name */ return 1;}
Android.mk文件
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS)LOCAL_MODULE := sdkLOCAL_SRC_FILES := libsdk.soinclude $(PREBUILT_SHARED_LIBRARY)include $(CLEAR_VARS) LOCAL_MODULE_FILENAME :=mytestlibLOCAL_MODULE :=mytestlibLOCAL_SHARED_LIBRARIES:=sdkLOCAL_LDLIBS:=-lm -llog -lz -ljnigraphicsLOCAL_SRC_FILES :=mytestlib.cinclude $(BUILD_SHARED_LIBRARY)
Application.mk文件(暂不支持X86)
APP_ABI := armeabiAPP_PLATFORM := android-14
libsdk.so文件
位于pc_debug.apk/octopus_sdk.apk/assets/solib/libsdk.so
测试文件
package.cpath = package.cpath ..";/data/local/tmp/?.so"local test = require("mytestlib")TracePrint(mytestlib.add(5,3))TracePrint(test.add(5,3))
补充(自定义交叉编译工具 bat文件)
@echo offcd /d %~dp0set "ARCH=arm"set "API=14"set VERSION=4.9set "NDKROOT=D:\android-ndk-r12b"set "HOSTSYSTEM=windows-x86_64"set "SOURCE=mytestlib.c"set "TARGET=mytestlib.so"set "CFLAGS=-L. -shared -lsdk -lm" ::以上可以自定义set "SYSROOT=%NDKROOT%\platforms\android-%API%\arch-%ARCH%"if %ARCH%==x86 ( set "CC=%NDKROOT%\toolchains\%ARCH%-%VERSION%\prebuilt\%HOSTSYSTEM%\bin\i686-linux-android-gcc.exe --sysroot=%SYSROOT%") else ( set "CC=%NDKROOT%\toolchains\%ARCH%-linux-androideabi-%VERSION%\prebuilt\%HOSTSYSTEM%\bin\%ARCH%-linux-androideabi-gcc.exe --sysroot=%SYSROOT%")%CC% %CFLAGS% -o %TARGET% %SOURCE%pause
相关文件下载
源码打包下载
0 0
- 章鱼lua扩展模块
- 章鱼
- C言扩展lua模块(入门)
- 用C语言扩展lua模块(入门)
- Lua扩展
- LUA模块
- lua模块
- lua 模块
- 扩展模块
- 扩展Lua库
- Lua 扩展库
- nginx+lua扩展
- Lua动态加载模块
- lua 重新加载模块
- lua 编译 C模块
- Lua中的模块
- lua不同模块调用
- Lua模块与包
- Python3 基础总结
- js 深复制(深拷贝)和浅复制(浅拷贝)的区别
- Lowest Common Ancestor of a Binary Tree
- 单点登录三个方法及原理:共享Session、基于OpenId的单点登录、基于Cookie的OpenId存储方案
- SAS硬盘和SATA硬盘最大的区别是什么?
- 章鱼lua扩展模块
- poj1860(最短路,负环)
- 子数组系列二:最大值减去最小值小于或等于 k 的子数组数量
- Wildcard Matching
- 服务器登录界面出现错误提示框 “在系统启动时至少有一个服务或驱动程序产生错误。详细信息,请使用事件查看器查看事件日志。”
- Linux queue.h之TAILQ队列分析
- C++友元重载运算符,模板类友元重载
- 原生JS阻止冒泡
- [HDU5790] Prefix 字典树+主席树