C语言与Lua交互

最近想要将Lua引入到项目中,来辅助C语言逻辑部分,看了许多Lua与C语言交互的文章,但收获不大。于是找了一个简单的例子,来验证一下自己的想法。

项目想法

首先假设你看过一些C语言与Lua交互的文章,并且对C与Lua交互的虚拟栈有些了解,我们想要做的就是在Lua中设计一个函数,这个函数有两个输入一个输出。在C语言中调用这个函数,在Lua中进行逻辑运算,最后将运算的结果返回给C使用。

C语言部分

//add.c

#include        <stdio.h>
#include        "lua.h"
#include        "lualib.h"
#include        "lauxlib.h"

/*the lua interpreter*/
lua_State* L;
int
luaadd(int x, int y)
{
        int sum;
/*the function name*/
        lua_getglobal(L,"add");
/*the first argument*/
        lua_pushnumber(L, x);
/*the second argument*/
        lua_pushnumber(L, y);
/*call the function with 2 arguments, return 1 result.*/
        lua_call(L, 2, 1);
/*get the result.*/
        sum = (int)lua_tonumber(L, -1);
/*cleanup the return*/
        lua_pop(L,1);
        return sum;
}

int
main(int argc, char *argv[])
{
        int sum;
/*initialize Lua*/
        L = lua_open();
/*load Lua base libraries*/
        luaL_openlibs(L);
/*load the script*/
        luaL_dofile(L, "add.lua");
/*call the add function*/
        sum = luaadd(10, 15);
/*print the result*/
        printf("The sum is %d \n",sum);
/*cleanup Lua*/
        lua_close(L);
        return 0;
}

Lua部分

--add two numbers
function add(x,y)
       return x + y
end 

遇到的问题

:~/Desktop/struct-0.2$ gcc -o main main.c -I/usr/local/include -llua -lm
//usr/local/lib/liblua.a(loadlib.o): In function `ll_loadfunc':
loadlib.c:(.text+0x7d3): undefined reference to `dlsym'
loadlib.c:(.text+0x819): undefined reference to `dlerror'
loadlib.c:(.text+0x83f): undefined reference to `dlopen'
loadlib.c:(.text+0x853): undefined reference to `dlerror'
//usr/local/lib/liblua.a(loadlib.o): In function `gctm':
loadlib.c:(.text+0xb14): undefined reference to `dlclose'
collect2: error: ld returned 1 exit status

解决方案

gcc -o main main.c -I/usr/local/include -llua -lm -ldl