我们从头开始讲起怎么为lua写一个C语言函数库。
首先去下载源代码,我这里选择的是5.3.5版本的源代码。然后去安装好mingw64编译工具。
我们将lua源代码解压,进入源代码目录,打开命令行,输入 make mingw
。
在命令make mingw
运行完毕后,我们会得到一系列的.o
、.a
等文件,还有luac
、lua
,lua53.dll
或者lua53.so
(取决于你的系统,我这里用的windows系统,所以是dll)。
我们用到的文件基本上就是liblua.a
这个文件。
#include <math.h>
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>
// 适配windows 和 linux 系统
#ifndef LUA_LIB_API
#ifdef _WIN32
#define LUA_LIB_API __declspec(dllexport)
#else
#define LUA_LIB_API __attribute__ ((visibility ("default")))
#endif
#endif
// 一个简单的sin函数
static int l_sin (lua_State * L) {
double d = luaL_checknumber(L, 1);
lua_pushnumber(L, sin(d));
return 1;
}
// 函数表
static const struct luaL_Reg mylib[] = {
{"lsin", l_sin},
{NULL, NULL}
};
LUA_LIB_API int luaopen_mylib (lua_State *L) {
// 将函数注册到一个table中
lua_newtable(L);
luaL_setfuncs(L, mylib, 0);
return 1;
}
输入命令gcc .\mylib.c liblua.a -I E:\libs\lua-5.3.5\src -fPIC -shared -o mylib.dll -Wall
进行编译。 其中-I
后面是lua源代码所在,为了方便起见,我已经将liblua.a
文件拷贝到了当前目录中。
上述命令结束后,我们会得到一个mylib.dll
文件,我们就可以正常使用这个库了。
E:\lua>lua
Lua 5.3.5 Copyright (C) 1994-2018 Lua.org, PUC-Rio
> mylib = require "mylib"
> mylib.lsin(30)
-0.98803162409286
>
需要注意的是,luaopen_mylib
下划线后面的部分必须和文件名一致,luaopen_mylib
对应于mylib.dll
或者mylib.so
。