lua 5.3 C函数库

我们从头开始讲起怎么为lua写一个C语言函数库。

首先去下载源代码,我这里选择的是5.3.5版本的源代码。然后去安装好mingw64编译工具。

我们将lua源代码解压,进入源代码目录,打开命令行,输入 make mingw

在命令make mingw运行完毕后,我们会得到一系列的.o.a等文件,还有luaclua,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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章