Lua模块 - 如何不包含Lua核心?

我需要构建这个Lua模块(https://github.com/starwing/luautf8),并能够在已经包含Lua核心的另一个应用程序中使用它。模块将通过'require'加载。

我在Windows 10上使用MinGW x64。我成功地构建了Lua 5.2,并提取了lua.dll文件并将其重命名为liblua.dll.a。 然后我使用以下Makefile构建了该模块:

CC = x86_64-w64-mingw32-gcc
LUA_INCDIR=$(STAGING_DIR)/usr/include

utf8.dll: lutf8lib.o
  $(CC) -m64 -O -shared -fpic lutf8lib.c -o utf8.dll -llua

lutf8lib.o: lutf8lib.c
  $(CC) -O2 -fpic -c -DLUA_BUILD_AS_DLL lutf8lib.c -I$(LUA_INCDIR)

问题是文件大小,它的大小为420kb,并且明显包含Lua核心(我得到了'multiple VMs'错误)。我需要构建不包含核心的模块。

以前我安装了通常的MinGW(x86),并使用以下Makefile:

CC = gcc
LUA_INCDIR=$(STAGING_DIR)/usr/include
utf8.dll: lutf8lib.o
    $(CC) -m32 -shared lutf8lib.c -o utf8.dll -llua

lutf8lib.o: lutf8lib.c
    $(CC) -fPIC -c lutf8lib.c -I$(LUA_INCDIR)

并获得了97kb的文件而不包含Lua核心。不幸的是,我特别需要x64文件。

更新:我尝试使用MSVC构建同一模块,但它似乎IDE更改了luaopen_utf8函数名称。如果我添加这个来修复它:

int __declspec(dllexport)

IDE会将Lua核心VM包含在DLL文件中。再一次。

点赞