Skip to content

如何在 skynet 中加入 C 库

Gowa2017 edited this page Dec 9, 2022 · 1 revision

直接修改 Makefile 的方案

参考 如何在 skynet 中加入 lua-cjson 库

skynet 作为 submodule 的方案

LUA_CLIB_PATH ?= luaclib
LUA_INC ?= skynet/3rd/lua
CFLAGS = -g -O0 -Wall -I$(LUA_INC)
SHARED := -fPIC --shared

$(LUA_CLIB_PATH) :
	mkdir $(LUA_CLIB_PATH)

$(LUA_CLIB_PATH)/cjson.so : 3rd/lua-cjson/lua_cjson.c 3rd/lua-cjson/strbuf.c 3rd/lua-cjson/fpconv.c | $(LUA_CLIB_PATH)
	$(CC) $(CFLAGS) $(SHARED) -I3rd/lua-cjson $^ -o $@

LUA_CLIB = cjson

all: \
  $(LUA_CLIB_PATH) \
  $(foreach v, $(LUA_CLIB), $(LUA_CLIB_PATH)/$(v).so)

参考 hanxi/skynet-demo/blob/master/Makefile

注意要点

  • 编译 so 的 lua 版本和 skynet 使用的 lua 版本一致,要么同时使用 3rd/lua ,要么同时使用系统的 lua 版本。
  • 编译 so 时不能 link liblua.a 静态库。

相关讨论