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

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