lua安裝 在此我的機器環境是cenos 6.8 我安裝的是lua5.1.4版本
安裝lua編譯的相關依賴 yum -y install readline-devel ncurses-devel tar -zxvf lua-5.1.4.tar.gz cd lua-5.1.4 make linux test make install至此lua模塊安裝完成,開始和c語言的交互之旅行吧
網上很多介紹c和lua交互的,但是在linux下面的編譯介紹卻沒找到,在此自己記錄下,也方便大家查看
在lua模塊安裝完成后,可以用命令find / -name ‘lua.h’ 查看lua.h的位置,網上很多人是用–PRofix指定位置,在此我都是默認安裝,發現默認其實已經是在/usr/local/bin 等系統目錄下,沒有其他配置,可直接使用,很方便。不需要像很多人說的那樣多此一舉,每次總是百度來百度去反而消磨很多精力。1實現自己的第一個c調用C的例子 test.lua
print("lua script test.lua have been load--")function showinfo() print ("hello world")endfunction lua_add(a,b) return a+bendfunction lua2c_add(a,b) return add(a,b)endtest.c
#include <stdio.h>#include <lua.h>#include <lauxlib.h>#include <lualib.h>int main(int argc, char *argv[]){ lua_State *L = lua_open(); L = luaL_newstate(); luaL_openlibs(L); luaL_dofile(L, "test.lua"); lua_getglobal(L,"showinfo"); lua_pcall(L,0,0,0); lua_getglobal(L,"lua_add"); lua_pushinteger(L,1); lua_pushinteger(L,5); lua_pcall(L,2,1,0); printf("lua add function return val is %d /n",lua_tointeger(L,-1)); lua_close(L); return 0;}編譯命令 gcc test.c -o test -llua -lm -ldl
2實現自己的第一個lua調用C的例子 c_lua.c
#include<stdio.h>#include<lua.h>#include<lualib.h>#include<lauxlib.h>static int add(lua_State* L){ int a = lua_tointeger(L,1);//獲取函數參數 int b = lua_tointeger(L,2); lua_pushinteger(L,a+b); return 1;}int main(){ lua_State *L = luaL_newstate(); //lua_State *L = Lua_open() luaL_openlibs(L); lua_register(L,"add",add);//注冊add函數,多個函數可以使用luaL_register注冊,該函數使用結構體的方式 luaL_dofile(L,"test.lua");//加載lua文件,建立lua所有變量(包括函數)的全局表 lua_getglobal(L,"lua2c_add");// 在lua的全局表查找lua2c_add函數,并壓入棧底 lua_pushinteger(L,3);//push函數參數1 lua_pushinteger(L,4);//push 函數參數2 lua_pcall(L,2,1,0);//執行棧中的函數,2代表倆個參數,1代表一個返回值,0代表沒有錯誤處理函數 int result = lua_tointeger(L,-1); //從棧中取回返回值 lua_pop(L,1); //清棧,此時只有一個返回值 printf("result = %d/n",result); lua_close(L);//關閉lua環境 return 0;}編譯命令 gcc c_lua.c -o app -llua -lm -ldl
Ok啦,經歷好幾天的迷霧,終于在linux跑起來了,還不太會寫博客,就此小小記錄下,也希望能帶給一些和我一樣有迷惑的朋友幫助
新聞熱點
疑難解答