为lua编写C库

版权声明:本文转自http://blog.csdn.net/huutu 转载请带上 http://www.liveslives.com/ https://blog.csdn.net/cp790621656/article/details/82809021

本文参考

https://blog.csdn.net/zhang197093/article/details/76400871

我一直是喜欢将各种库揉成一团放在一个可执行文件里。一个sh编译出来。

但是我看到朋友都喜欢将不同功能的库分别编译成so,在lua中require。

我也来学习一下这种做法。

<font color="#000000">转载注明http://www.liveslives.com</font>

首先参照上面的博文,编写C库代码。

我写了一个叫 Wrap的模块。

#include"lauxlib.h"



static int Max(lua_State* L)
{
    int a=lua_tointeger(L,1);
    int b=lua_tointeger(L,2);
    if(a>b)
    {
        lua_pushboolean(L,1);
    }
    else
    {
        lua_pushboolean(L,0);
    }
    return 1;
}

static const struct luaL_Reg funcs[]=
{
    {"Max",Max},
    {NULL,NULL}
};

int luaopen_cWrap(lua_State* L)
{
    luaL_register(L,"Wrap",funcs);
    return 1;
}

然后gcc编译成so。

gcc -fPIC -c Wrap.c -I./../../Depends/lua-5.1.4/
gcc -shared Wrap.o ./liblua.so -o cWrap.so

这里需要lua的so,所以首先来编译lua的so。

gcc lapi.c lauxlib.c lbaselib.c lcode.c ldblib.c ldebug.c ldo.c ldump.c lfunc.c lgc.c linit.c liolib.c llex.c lmathlib.c lmem.c loadlib.c lobject.c lopcodes.c loslib.c lparser.c lstate.c lstring.c lstrlib.c ltable.c ltablib.c ltm.c lua.c luac.c lundump.c lvm.c lzio.c print.c -fPIC -shared -o liblua.so

我不懂makefile,所以我一直写sh里面调用gcc。

转载注明http://www.liveslives.com https://blog.csdn.net/huutu

编译好之后,把cWrap.so liblua.so 拷贝到lua目录。

然后编写lua脚本测试。

print("hello module")
print(package.cpath)

local Wrap=require "cWrap"
local tmpRet=Wrap.Max(5,3)
print("tmpRet:" .. tostring(tmpRet))

 这种方式挺好的,但是在我的项目里不怎么合适。

因为我是直接把lua编译到我的可执行文件里。

如果用本文方式,我又需要多几个so文件。

感觉挺麻烦的。

猜你喜欢

转载自blog.csdn.net/cp790621656/article/details/82809021