初窥LuaJit中 --- 试用FFI

时间:2021-11-09 17:03:11

1. 背景

不知LuaJit的应该很多,但知道cocos2d应该很多。我初听LuaJit 还是有从一前辈口中得知,当时只听了大概原理。简单来说就是用C来封装核心库,用Lua 脚本来写业务,这个在做游戏方面很适用,同时我觉得也很适用需求更新较快的业务。
听得就很让人动心,对于现在的一些业务,核心功能也是封装起来的,但没有完全独立出来,有时需要改一个指标你就需要去改那部分代码再编译,不同的项目可能需要不同的指标,这样到最后核心库就会产生各种各样的版本,从而不利于维护。Lua 脚本只提供驱动将你各个功能模块组织起来,不过同时它也会要求你的库能高度封装起来。

2 试用FFI

FFI 我就不再赘述了,请看官网,如果没有看懂没关系,我们直接看代码

2.1 代码

// so_test_a.c 代码
#include <stdio.h>
void print_test_a()
{
    printf("hello lua from c\n'");
}
--- main.lua 脚本
local ffi = require("ffi")

local C = ffi.load('Test')

ffi.cdef[[ void print_test_a(); ]]

C.print_test_a()

2.2 编译运行

# 编译C代码,本人的环境是 mac,如果您是linux,请改用--shared
gcc -c -g -O0 -Wall -I./  -o so_test_a.o so_test_a.c
gcc -dynamiclib -g -O0 -Wall -o libTest.dylib so_test_a.o
#用luajit执行脚本
luajit main.lua

2.3 运行结果

运行结果就不必说,必须打印出

hello lua from c

3. 总结

这个看起来其实是挺简单的,可资料较为缺乏,一点点Google 出来的,供大家参考。