Linux环境下 lua 调用自定义so动态库(skynet)
来源:互联网 发布:深圳壹柒捌网络怎么样 编辑:程序博客网 时间:2024/05/23 11:59
最近看的 skynet 使用的 c+lua 的架构,框架提供的是基础的api,所以业务逻辑还得自己去写,如果某些业务逻辑比较耗性能,那可能就需要把某些业务逻辑丢到 c/c++ 去做,提供个接口供 lua 调用。
那么就需要去编个动态库(.so)、静态库(.a)啥的
- 写c接口(有些类型不严谨,就偷懒不改了,编译时会warning,可无视)
#include <lua.h>#include <lauxlib.h>#include <stdio.h> static int ltest1(lua_State *L) { int num = luaL_checkinteger(L, 1); printf("--- ltest1, num:%d\n", num); return 0;} static int ltest2(lua_State *L) { size_t len = 0; const char * msg = luaL_checklstring(L, 1, &len); printf("--- ltest2, msg:%s, len:%d\n", msg, len); return 0;} static int ltest3(lua_State *L) { size_t len = 0; int num = luaL_checkinteger(L, 1); const char * msg = luaL_checklstring(L, 2, &len); printf("--- ltest3, num:%d, msg:%s, len:%d\n", num, msg, len); return 0;} int luaopen_myLualib(lua_State *L) { luaL_Reg l[] = { { "test1", ltest1 }, { "test2", ltest2 }, { "test3", ltest3 }, { NULL, NULL }, }; luaL_newlib(L, l); return 1;}
- 写makefile文件
CC ?= gccCFLAGS = -g -O2 -Wall -I$(LUA_INC)SHARED := -fPIC --shared TARGET = myLualib.soLUA_CLIB_PATH = clib # 引入lua头文件 LUA_INC ?= /root/lua-5.3.0/src start: $(TARGET) $(TARGET) : myLualib.c | $(LUA_CLIB_PATH) $(CC) $(CFLAGS) $(SHARED) $^ -o $@ clean: rm -fr $(TARGET) $(LUA_CLIB_PATH) : mkdir $(LUA_CLIB_PATH)
- 执行以下make命令,注意target是start
# make start
然后myLualib.so
就出来了 - 写个lua测试以下 (文件名 mylua.lua)
function test3( ... ) print("----- test myCustomLib") package.cpath = "./?.so" --so搜寻路劲 local f = require "myLualib" -- 对应luaopen_myLualib中的myLualib f.test1(123) f.test2("hello world") f.test3(456, "yangx")end test3()
执行以下
# lua mylua.lua
结果[root@localhosttestMake]# lua mylua.lua -----testmyCustomLib---ltest1,num:123---ltest2,msg:helloworld,len:11---ltest3,num:456,msg:yangx,len:5
0 0
- Linux环境下 lua 调用自定义so动态库(skynet)
- Linux环境下 lua 调用自定义so动态库(skynet)
- Skynet服务器框架(七) Lua中调用自定义C库
- Linux 下动态链接库 *.so(生成、调用)
- 转载 Python调用Linux下的动态库(.so)
- Ubuntu环境下使用Unity3D调用C++编写的Linux so动态链接库
- linux调用.so动态库
- linux下调用动态链接库so文件
- linux 下 -------- 创建和调用动态共享库(.so)
- linux下.so动态库的生成、编译、调用
- Linux下的动态共享库(so)开发调用
- Linux下.so动态库的建立和调用
- Linux 环境下java 调用SO
- Linux编程练习(二)—— Linux下.so动态库的建立和调用
- Linux环境下动态库的调用
- Linux下调用so库
- linux 下python 调用lua环境配置
- Linux下使用QT编写和调用动态链接库(.so文件)
- bug收集,点滴积累
- Android中使用动画动态添加商品进购物车
- C#中基类、派生类以及使用接口来实现多重继承
- C运行时库(C Run-time Library)详解
- iptables防火墙规则的添加、删除、修改、保存
- Linux环境下 lua 调用自定义so动态库(skynet)
- 时髦的互联网公司都在用什么技术
- 线程的状态
- [阶段一]java编程比赛-龟兔赛跑
- design pattern——singleton
- ReviewForJob——希尔排序(缩小增量排序)之塞奇威克增量序列
- poj1129
- HDU3351 -Seinfeld
- 在Eclipse中导入SVN库里的Maven项目