lua 5.3 C関数ライブラリ

5457 ワード

私たちはluaのためにC言語関数ライブラリを書く方法を最初から話します.
まずソースコードをダウンロードします.ここで選んだのは5.3.5バージョンのソースコードです.次にmingw 64コンパイルツールをインストールします.
luaソースコードを解凍し、ソースコードディレクトリに入り、コマンドラインを開き、make mingwを入力します.
コマンドmake mingwの実行が完了すると、一連の.o.aなどのファイルが得られます.また、luaclualua53.dllまたはlua53.so(あなたのシステムによっては、私がここで使っているwindowsシステムなのでdllです).
私たちが使っているファイルは基本的にliblua.aというファイルです.

#include 
#include 
#include 
#include 
//   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_mylibmylib.dllまたはmylib.soに対応する.