У меня на компьютере установлена 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
Я в тупике. Где моя библиотека?





При сборке модуля Lua для Windows DLL вам необходимо использовать __declspec(dllexport), например. этого должно быть достаточно для самых простых случаев:
__declspec(dllexport) int luaopen_lualib(lua_State *L) {
luaL_newlib(L, lualib);
return 1;
}
Пожалуйста, обратитесь к Строительные модули для пользователей lua.
Что касается более подробного примера, я бы предложил luasocket: источник, заголовок.
Какой компилятор вы используете?