Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。比如通过调用 C/C++ 编写的动态库可以使 Lua 执行起来非常高效。下面演示如何编写 C/C++ 动态库并在 Lua 中调用。
-
安装 Lua 和 Lua-dev
在下面安装包中 lua5.3 提供了解释器, 而 liblua5.3-dev 提供了 C/C++ 编译环境的头文件和链接库sudo apt-get install lua5.3 sudo apt-get install liblua5.3-dev
-
hello.c 文件
#include "lua.h" #include "lauxlib.h" #include <stdio.h> int say_hello() { printf("Hello Lua\n"); return 1; } /* 固定写法 luaopen_xxxx (xxxx 为库名称), Lua require 时调用 */ int luaopen_hello(lua_State *L) { /* 注册 Lua 函数 */ luaL_Reg fns [] = { {"sayHello", say_hello}, {NULL, NULL} }; /* 创建 Lua 库 */ luaL_newlib(L, fns); return 1; }
-
Makefile 文件
LIBFLAG= -shared -fpic hello.so: hello.c gcc hello.c -o hello.so $(LIBFLAG) -I/usr/include/lua5.3 -llua5.3
-
test.lua 文件
package.cpath = "./?.so" local hello = require "hello" hello.sayHello()
-
运行结果
$ make gcc hello.c -o hello.so -shared -fpic -I/usr/include/lua5.3 -llua5.3 $ lua test.lua Hello Lua
说明: 编译参数 -shared -fpic 告诉编译器生成的是动态链接库, 详情参考 C 动态与静态链接库
网友评论