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

时间:2019-04-04 05:20:43

标签: c windows lua

我的机器上安装了Lua 5.3.5 64位。我正在编译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

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

require("lualib");

我明白了:

$ lua.exe test.lua
C:\Program Files\Lua\lua.exe: error loading module 'lualib' from file '.\lualib.dll':
        The specified procedure could not be found.

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     The specified procedure could not be found.
        init

我很困惑。我的图书馆在哪里?

1 个答案:

答案 0 :(得分:1)

在将Lua模块构建为Windows DLL时,您需要使用__declspec(dllexport),例如对于最简单的情况,这应该足够了:

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

有关lua用户,请参阅Building Modules

对于更详细的示例,我建议使用luasocket:sourceheader