Lua C module 注意事项

lua脚本中的C module必须采用动态链接库的形式.
如果lua脚本再被c程序调用,c程序和CModule都必须动态链接lua库,(如果采用静态链接的方式,会报multiple Lua VMs detected错误,认为启动了两个lua虚拟机)。
这样,就需要把lua编译成动态链接库,而lua默认提供的makefile没有编译动态链接库,不知道为啥,具体修改(红色部分)如下:


1. Makefile

TO_LIB= liblua.a liblua.so


2. src/Makefile

LUA_A=  liblua.a
LUA_SO= liblua.so
CORE_O= lapi.o lcode.o lctype.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o \
    lmem.o lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o \
    ltm.o lundump.o lvm.o lzio.o
LIB_O=  lauxlib.o lbaselib.o lbitlib.o lcorolib.o ldblib.o liolib.o \
    lmathlib.o loslib.o lstrlib.o ltablib.o loadlib.o linit.o
BASE_O= $(CORE_O) $(LIB_O) $(MYOBJS)


LUA_T=  lua 
LUA_O=  lua.o


LUAC_T= luac
LUAC_O= luac.o


ALL_O= $(BASE_O) $(LUA_O) $(LUAC_O)
ALL_T= $(LUA_A) $(LUA_T) $(LUAC_T) $(LUA_SO)
ALL_A= $(LUA_A)


# Targets start here.
default: $(PLAT)


all:    $(ALL_T)


o:  $(ALL_O)


a:  $(ALL_A)


$(LUA_A): $(BASE_O)
    $(AR) $@ $(BASE_O)
    $(RANLIB) $@


$(LUA_SO):$(CORE_O) $(LIB_O)

    $(CC) -o $@ -shared $? -ldl -lm




编译第三方C Module
gcc -o LuaXML_lib.so -fPIC -shared LuaXML_lib.c -llua -ldl 


编译C可执行程序
gcc 1.c 0o 1 -llua -ldl -lm

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值