Lua C module 注意事项
lua脚本中的C module必须采用动态链接库的形式.如果lua脚本再被c程序调用,c程序和CModule都必须动态链接lua库,(如果采用静态链接的方式,会报multiple Lua VMs detected错误,认为启动了两个lua虚拟机)。这样,就需要把lua编译成动态链接库,而lua默认提供的makefile没有编译动态链接库,不知道为啥,具体修改(红色部分)如下:1
·
lua脚本中的C module必须采用动态链接库的形式.
如果lua脚本再被c程序调用,c程序和CModule都必须动态链接lua库,(如果采用静态链接的方式,会报multiple Lua VMs detected错误,认为启动了两个lua虚拟机)。
这样,就需要把lua编译成动态链接库,而lua默认提供的makefile没有编译动态链接库,不知道为啥,具体修改(红色部分)如下:
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)
如果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.aLUA_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
更多推荐
已为社区贡献3条内容
所有评论(0)