Lua c lib Windows: 找不到指定的程序

我在电脑上安装了 Lua 5.3.5 64-bit。我正在编译一个 64 位的“dll”来测试 C API 进程。这是我的文件,driver.c:

#define LUA_LIB

#include "lua/lua.h"
#include "lua/lualib.h"
#include "lua/lauxlib.h"

static int returnone(lua_State *L) {
    return 1;
}

static const luaL_Reg lualib[] = {
    {"returnone", returnone},
    {NULL, NULL}
};

int luaopen_lualib(lua_State *L) {
    luaL_newlib(L, lualib);
    return 1;
}

这会输出到 lualib.dll

我在与 lualib.dll 相同的目录中创建了一个名为 test.lua 的脚本。

require("lualib");

我得到了这个结果:

$ lua.exe test.lua
C:\Program Files\Lua\lua.exe: error loading module 'lualib' from file '.\lualib.dll':
        找不到指定的程序。

stack traceback:
        [C]: in ?
        [C]: in function 'require'
        test.lua:1: in main chunk
        [C]: in ?

然后我尝试

print(package.loadlib("lualib", "luaopen_lualib"));

我得到

$ lua.exe test.lua
nil     找不到指定的程序。
        init

我一筹莫展。我的库在哪里?

点赞
用户4567755
用户4567755

当将 Lua 模块构建为 Windows DLL 时,需要使用 __declspec(dllexport)。例如,对于大多数简单情况,以下内容应该足够:

__declspec(dllexport) int luaopen_lualib(lua_State *L) {
    luaL_newlib(L, lualib);
    return 1;
}

请参阅 Building Modules 上的 lua-users。

至于更详细的示例,我建议使用 luasocket:源代码头文件

2019-04-04 09:29:29