Lua中的動(dòng)態(tài)鏈接實(shí)例
C語(yǔ)言應(yīng)用程序中經(jīng)常使用動(dòng)態(tài)鏈接機(jī)制集成各個(gè)模塊;不過(guò),動(dòng)態(tài)鏈接機(jī)制并不是ANSI C標(biāo)準(zhǔn)的一部分,也就是說(shuō)實(shí)現(xiàn)方法是不可以移植的。
Lua通常不會(huì)包含任何無(wú)法通過(guò)ANSI C來(lái)實(shí)現(xiàn)的機(jī)制,如果動(dòng)態(tài)鏈接是一個(gè)例外。Lua打破了對(duì)可移植性的準(zhǔn)則,為幾種平臺(tái)實(shí)現(xiàn)了一套動(dòng)態(tài)鏈接機(jī)制。
package.loadlib是動(dòng)態(tài)鏈接功能的核心函數(shù),接收兩個(gè)參數(shù):動(dòng)態(tài)庫(kù)的完整路徑名、函數(shù)名稱。
loadlib函數(shù)加載指定的庫(kù),并將其鏈接入Lua;如你所想,并不會(huì)調(diào)用庫(kù)中的任何函數(shù),而是將一個(gè)C函數(shù)作為L(zhǎng)ua函數(shù)返回;如果load過(guò)程中發(fā)生任何錯(cuò)誤,返回nil。
loadlib是一個(gè)比較底層的函數(shù),通常使用require來(lái)加載C程序庫(kù),這個(gè)函數(shù)會(huì)搜索指定的程序庫(kù),然后調(diào)用loadlib來(lái)加載庫(kù),并返回初始化函數(shù),這個(gè)初始化函數(shù)應(yīng)將庫(kù)中提供的函數(shù)注冊(cè)到Lua中。
作為一個(gè)簡(jiǎn)單的實(shí)例:
hello.c
#include<stdio.h>
void hello(){
printf("hello,world\n");
}
編譯:gcc -o libhello.so -fPIC -shared hello.c
> f = package.loadlib('${pathhere}/libhello.so', 'hello')
> f()
hello,world
hello()函數(shù)比較簡(jiǎn)單,沒(méi)有參數(shù),沒(méi)有返回值,具體的接口規(guī)范還需研究。
相關(guān)文章
Lua 操作 MongoDB 數(shù)據(jù)庫(kù)實(shí)例
這篇文章主要介紹了Lua 操作 MongoDB 數(shù)據(jù)庫(kù)實(shí)例,本文給出了修改后的lua-mongo API和具體的操作MongoDB 數(shù)據(jù)庫(kù)代碼,需要的朋友可以參考下2015-03-03
Lua中的函數(shù)相關(guān)知識(shí)點(diǎn)整理匯總
這篇文章主要介紹了Lua中的函數(shù)相關(guān)知識(shí)點(diǎn)整理匯總,包括函數(shù)的參數(shù)傳遞和定義函數(shù)等基本知識(shí),需要的朋友可以參考下2015-05-05
Lua Table轉(zhuǎn)C# Dictionary的方法示例
這篇文章主要給大家介紹了關(guān)于Lua Table轉(zhuǎn)C# Dictionary的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-03-03
獲取Lua表結(jié)構(gòu)(table)數(shù)據(jù)實(shí)例
這篇文章主要介紹了獲取Lua表結(jié)構(gòu)(table)數(shù)據(jù)實(shí)例,本文使用lua_gettable函數(shù)獲取表結(jié)構(gòu),需要的朋友可以參考下2014-09-09
Lua編程示例(六): C語(yǔ)言調(diào)用Lua函數(shù)
這篇文章主要介紹了Lua編程示例(六): C語(yǔ)言調(diào)用Lua函數(shù),本文直接給出代碼實(shí)例,需要的朋友可以參考下2015-07-07
Lua 學(xué)習(xí)筆記之C API 遍歷 Table實(shí)現(xiàn)代碼
這篇文章主要介紹了Lua 學(xué)習(xí)筆記之C API 遍歷 Table實(shí)現(xiàn)代碼,需要的朋友可以參考下2014-12-12

