lua调用c/c++ so

来源:互联网 发布:ajax post请求无数据 编辑:程序博客网 时间:2024/04/30 06:46
lua require机制
local m= require "mod"//返回由模块函数组成的table
// 1 lua文件loadfile加载 2 c文件loadlib加载( 定义一个 luaopen_<模块名>的函数,loadlib加载成功会调用

luaopen_<模块名> 小技巧:
模块名为a-b,则会调用 luaopen_b函数

搜索文件路径
1 LUA_PATH /LUA_CPATH
mod.foo()
m.foo()

一 require lua file
complex.lua

local modname = ...
local M={}

_G[modname]=M

package.loaded[modname]=M

function M.add(c1,c2)
    return c1+c2
end

complex_test.lua
local c = require "complex"

print( c.add(1,2) )
print( complex.add(2,3))

:!lua-5.2.3 complex_test.lua
3
5

lua5.1后支持的一种写法
complex.lua
module(...,package.seeall)
function add(c1,c2)
    return c1+c2
end

二 require c file
require_c.c

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

static int add(lua_State *L)
{
    int a,b,c;
    a=luaL_checknumber(L,1);
    b=luaL_checknumber(L,2);
    c=a+b;
    lua_pushnumber(L,c);
    return 1;
}

static const struct luaL_Reg lib[]={
    {"cadd",add},
    {NULL,NULL},
};

int luaopen_require_c(lua_State *L)
{
    //luaL_openlib( L,"requirec",lib,0);
    luaL_newlib( L, lib);
    return 1;
}
gcc require_c.c -fPIC -shared -o require_c.so -I ~/lua_so/include/

require_test.lua
local c = require "require_c"
                                 
print(c.cadd(1,4))                


0 0