0%

Lua编译C模块时需要注意的问题

今天在编译一个 Lua C 模块的时候,没有什么毛病。但是在直接用解释器执行的时候,出现了问题,lua: multiple Lua VMs detected 通过搜索引擎来看,这是因为链接了静态库,而 Lua 解释器也链接了静态库,因此会出现多个 VM 的情况。需要做一下改进才行。

Lua 动态库编译

默认情况下,Lua 内带了静态库和 Lua 可执行程序解释器的编译脚本,但是没有动态库的,因此需要进行手动添加规则:

我从这里看到了别人的解决方案:Build lua shared libraries

LUA_SO=liblua.so

ALL_T= $(LUA_A) $(LUA_T) $(LUAC_T) $(LUA_SO)

$(LUA_SO): $(CORE_O) $(LIB_O)
$(CC) -o $@ -shared $?

实则是将 Lua 的核心代码和 Lib 的核心代码编译成动态库,而排除了解释器的代码。

另外需要注意的是,默认静态库不是位置无关代码,因此需要在编译器选项加上 -fPIC 才行

C 模块编译

这个没啥好说的,-shared 就行了