"требовать" не работать в коде луа
В этом коде я загружаю и запускаю test.lua
файл
int main (){
L = luaL_newstate();
luaL_openlibs(L);
luaL_dofile(L, "test.lua");
lua_close(L);
return 0;
}
содержимое моего файла test.lua
print ("s1");
r=require 'simple';
print ("s2");
simple
модуль установлен раньше
когда беги ./lua_c
; вывод только: s1
но когда беги lua test.lua
; вывод
s1
s2
а также r
в ноль
1 ответ
simple
не удается загрузить или проанализировать или выполнить. Чтобы найти проблему, используйте luaL_loadfile
вместо luaL_dofile
и проверьте возвращаемое значение. Если не ноль, произошла ошибка загрузки, которую вы можете вытолкнуть из стека Lua и распечатать. Если нет ошибки, сделайте lua_pcall(L, 0, LUA_MULTRET, 0))
чтобы запустить патрон, созданный loadfile, и снова проверить код возврата на наличие ошибки, вытолкнуть стек и распечатать. Было бы что-то вроде этого:
int main ()
{
L = luaL_newstate();
luaL_openlibs(L);
if (luaL_loadfile(L, "test.lua"))
{
cout << "Error: " << lua_tostring(L, -1) << endl;
}
else if (lua_pcall(L, 0, LUA_MULTRET, 0))
{
cout << "Error: " << lua_tostring(L, -1) << endl;
}
else
{
// call successful
}
lua_close(L);
return 0;
}
Обновление: теперь, когда вы знаете из сообщения об ошибке, что simple.so имеет неопределенный символ: lua_gettop
, вы знаете, что есть ошибка ссылки. возможно simple.so
не связан с lua51.so
, но так как он работает с lua.exe, который связан с lua lib, он будет работать с вашим приложением, которое, безусловно, также связано с ним. Другая возможность состоит в том, что lua.exe статически связан, но simple.so не связан. Подтвердите это simple.so
связан с lua51.so, и его можно найти, например, через LD_LIBRARY_PATH
, Убедитесь, что lua.exe связан с тем же.so.