Linux下編寫Lua擴(kuò)展so文件和調(diào)用方法實(shí)例
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <limits.h>
#include <math.h>
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
/* 庫(kù) open 函數(shù)的前置聲明 */
int luaopen_mylib(lua_State *L);
static int l_sin (lua_State *L)
{
double d = luaL_checknumber(L, 1);
lua_pushnumber(L, sin(d));
//printf("ok now is luahook!\n");
return 1; /* number of results */
}
static const luaL_Reg mylib[] =
{
{"lsin", l_sin},
{NULL, NULL} /* 必須以NULL結(jié)尾 */
};
int luaopen_mylib(lua_State *L)
{
luaI_openlib(L, "mylib", mylib, 0);
return 1;
}
如果是.cpp文件,在luaopen_mylib一定要加 extern "C", 否則導(dǎo)出的函數(shù)會(huì)被重命名,切記切記
編譯:gcc mylibs.c -fPIC -shared -o libmylib.so -llua
Makefile文件
CXX =gcc
LIBNAME:=libmylib.so
HDRNAME:=mylibs.c
TARGETNAME:=mylibs
CNAME:=$(patsubst %,%.c,$(TARGETNAME))
ONAME:=$(patsubst %,%.o,$(TARGETNAME))
all:libmylib
libmylib: $(ONAME)
$(CXX) -g -shared -Wl,$(LIBNAME) \
-o $(LIBNAME) $(ONAME) -llua
%.o: %.c
$(CXX) -fPIC -c -Wall $(CNAME)clean:$(RM) *.o *.so
lua調(diào)用腳本:
local one, two, three = package.loadlib("libmylib.so", "luaopen_mylib")()
print(mylib.lsin(10))
- Python下調(diào)用Linux的Shell命令的方法
- 利用Golang如何調(diào)用Linux命令詳解
- Linux makefile 和shell文件相互調(diào)用實(shí)例詳解
- 淺談在linux kernel中打印函數(shù)調(diào)用的堆棧的方法
- 詳解Linux驅(qū)動(dòng)中,probe函數(shù)何時(shí)被調(diào)用
- 三種方法實(shí)現(xiàn)Linux系統(tǒng)調(diào)用
- 舉例講解Linux系統(tǒng)下Python調(diào)用系統(tǒng)Shell的方法
- Python在Windows和在Linux下調(diào)用動(dòng)態(tài)鏈接庫(kù)的教程
- Linux下使用python調(diào)用top命令獲得CPU利用率
- Java調(diào)用linux shell腳本的方法
- 詳解linux系統(tǒng)調(diào)用原理
相關(guān)文章
lua讀取redis數(shù)據(jù)的null判斷示例代碼
最近在工作中遇到了一個(gè)問(wèn)題,通過(guò)查找相關(guān)資料才得知原因是因?yàn)榉祷亟Y(jié)果的問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于lua讀取redis數(shù)據(jù)的null判斷的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2018-09-09Lua基礎(chǔ)教程之賦值語(yǔ)句、表達(dá)式、流程控制、函數(shù)學(xué)習(xí)筆記
這篇文章主要介紹了Lua基礎(chǔ)教程之賦值語(yǔ)句、表達(dá)式、流程控制、函數(shù)學(xué)習(xí)筆記,本文來(lái)自個(gè)人總結(jié),需要的朋友可以參考下2014-09-09Lua字符串庫(kù)(string庫(kù))學(xué)習(xí)筆記
這篇文章主要介紹了Lua字符串庫(kù)(string庫(kù))學(xué)習(xí)筆記,本文列舉了一些常用的Lua字符串庫(kù)函數(shù),如byte、char、dump、find等,需要的朋友可以參考下2014-12-12Lua編程示例(三):稀疏表、雙端隊(duì)列、格式化輸出、表和循環(huán)表的格式化輸出
這篇文章主要介紹了Lua編程示例(三):稀疏表、雙端隊(duì)列、格式化輸出、表和循環(huán)表的格式化輸出,本文直接給出實(shí)例代碼,代碼中包含詳細(xì)注釋,需要的朋友可以參考下2015-07-07Lua中實(shí)現(xiàn)面向?qū)ο蟮囊环N漂亮解決方案
這篇文章主要介紹了Lua中實(shí)現(xiàn)面向?qū)ο蟮囊环N漂亮解決方案,本文給出實(shí)現(xiàn)代碼、使用方法及代碼分析,需要的朋友可以參考下2015-01-01Mac平臺(tái)中編譯安裝Lua運(yùn)行環(huán)境及Hello Lua實(shí)例
這篇文章主要介紹了Mac平臺(tái)中編譯安裝Lua運(yùn)行環(huán)境及Hello Lua實(shí)例,本文給出了兩種Hello Lua示例,一種是控制臺(tái)直接輸出,通過(guò)文件編譯輸出,需要的朋友可以參考下2014-10-10舉例簡(jiǎn)介L(zhǎng)ua中函數(shù)的基本用法
這篇文章主要介紹了舉例簡(jiǎn)介L(zhǎng)ua中函數(shù)的基本用法,--兩個(gè)橫線開始單行的注釋,--[[加上兩個(gè)[和]表示多行的注釋--]],需要的朋友可以參考下2015-07-07