Lua Lua呼叫C動態庫

2021-08-08 15:27:07 字數 1359 閱讀 5071

lua 好歸好,但有很多對效率要求較高的服務,還得讓c來完成。本篇學習下lua如何呼叫c。

最重要的部分:

定義乙個 luaopen_* 函式,並呼叫 lual_openlib 函式

int luaopen_mylib(lua_state *l)

, // key-val,相當於

,// 必不可少

};lual_newlib(l,l);

return 1;

}

這個函式相當於作為此動態庫的main函式。需要注意:

1、luaopen_是此函式的字首,不可修改。後面的內容是我們在lua中使用 require 引用此庫時的字串名稱(假如名稱中帶有下劃線,在使用require需要將下劃線替換為點,例如:「mylib_test」->「mylib.test」)。

2、在lua5.0中呼叫的是lual_openlib,但是在lua5.3中,則是使用lual_newlib

下面是乙個簡單的例子:

#include //lua基礎函式庫,lua_字首

#include //輔助庫,lual_字首,利用lua.h實現的更高層的抽象

#include /**

* 定義在lua中可呼叫的函式,要遵循規範:返回值必須為int,需傳入lua_state

*/static int test(lua_state *l)

int luaopen_mylib(lua_state *l),

}; lual_newlib(l, l);

return 1;

}

lual_checkinteger() 和 lual_checklstring()是用來獲取引數的。

如何生成 .so 動態庫?

gcc -fpic -shared -o mylib.so mylib.c

詳見:【c/c++】動態庫與靜態庫

接著用lua呼叫:

--設定.so搜尋路勁

package.cpath = "./?.so"

--載入我們自定義的庫mylib.so

local mylib = require "mylib"

mylib.test(666, "mick")

輸出如下:

come from test: num = 666	str = mick	len = 4

以上僅僅是簡單的從lua中獲取了資料並列印出來,關於資料的返回,還涉及到lua虛擬棧,後面在做詳細學習。

c 呼叫lua,lua呼叫c

建立工程 引用lua的動態庫和工程專案的配置資訊 結合 main.lua指令碼檔案 print lua呼叫c lua呼叫c 結合部分 c 向lua堆疊寫東西 通過lua堆疊 lua通過lua全域性標量獲取返回lua堆疊再到c lua傳遞數字給c cgivelua wangcheng 22,1 lua...

C呼叫C 動態庫,靜態庫

c呼叫c 動態庫,靜態庫 1 include 2 using namespace std 34 class paul 5 10 11 int paul add int a,int b 12 17 18 extern c 如果沒有則不行 19 25 1 include 2 extern void ca...

VC 呼叫C 動態庫

近期專案中,需要訪問客戶資料庫,客戶不希望直接訪問其資料庫,而是以動態庫介面的形式開放,還是用c 開發的。經過不斷嘗試,總結方法如下 包含動態庫 using test.dll using namespace test lib using namespace runtime interopservic...