Lua c lib Windows: указанная процедура не найдена - PullRequest
1 голос
/ 04 апреля 2019

На моей машине установлена ​​64-битная версия Lua 5.3.5.Я собираю 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 Ответ

1 голос
/ 04 апреля 2019

При сборке из модуля Lua в Windows DLL вам нужно использовать __declspec(dllexport) например. этого должно быть достаточно для самых простых случаев:

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

См. Строительные модули на пользователях lua.

Что касается более подробного примера, я бы предложил luasocket: source , header .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...