Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Użycie biblioteki lualib, błąd wywołania lua API

Ostatnio zmodyfikowano 2021-06-15 17:47
Autor Wiadomość
Temat założony przez niniejszego użytkownika
Użycie biblioteki lualib, błąd wywołania lua API
» 2021-06-15 01:45:19
Witam
Po aktualizacji bibliotek lua50 na lua5.1, miałem nadzieje że ten błąd który napotkałem:
actions.cpp:748:29: error: 'luaopen_loadlib' was not declared in this scope
     luaopen_loadlib(luaState);
                             ^
actions.cpp:753:82: error: 'lua_dofile' was not declared in this scope
 lua_dofile(luaState, std::string(datadir + "actions/lib/actions.lua").c_str());

actions.cpp:763:44: error: 'lua_dofile' was not declared in this scope
     lua_dofile(luaState, scriptname.c_str());
         
to będzie koniec problemów.. więc wygooglowałem, i naprawiłem go w kodzie:
C/C++
ActionScript::ActionScript( Game * igame, const std::string & datadir, const std::string & scriptname )
    :
game( igame )
   
, _player( NULL )
{
   
this->loaded = false;
   
lastuid = 0;
   
if( scriptname == "" )
       
 return;
   
   
luaState = lua_open();
   
luaopen_package( luaState ); // linia: 748
   
luaopen_base( luaState );
   
luaopen_math( luaState );
   
luaopen_string( luaState );
   
luaopen_io( luaState );
   
luaL_dofile( luaState, std::string( datadir + "actions/lib/actions.lua" ).c_str() ); // linia: 753
   
FILE * in = fopen( scriptname.c_str(), "r" );
   
   
if( !in )
   
{
       
std::cout << "Error: Can not open " << scriptname.c_str() << std::endl;
       
return;
   
}
   
else
       
 fclose( in );
   
   
luaL_dofile( luaState, scriptname.c_str() ); // linia: 763
   
this->setGlobalNumber( "addressOfActionScript",( uint64_t ) this );
   
this->loaded = true;
   
this->registerFunctions();
}

Zamieniając lua_dofile na luaL_dofile oraz luaopen_loadlib(luaState); na luaopen_package(luaState);
Następnie po próbie włączenia silnika, przy ładowaniu biblioteki /actions/lib/actions.lua, napotkałem na błąd:
PANIC: unprotected error in call to Lua API (no calling environment)
 proszę o pomoc.
P-178770
» 2021-06-15 10:04:02
https://stackoverflow.com/questions/12017980/lua-errorpanic-unprotected-error-in-call-to-lua-api-attempt-to-call-a-nil-valu

Czy to jest runtime error? Ustaw poprawny katalog roboczy. Komunikat sugeruje, że nie udało się znaleźć pliku na dysku we wskazanej lokalizacji.
P-178771
Temat założony przez niniejszego użytkownika
» 2021-06-15 10:11:40
Jak najbardziej, folder z plikiem actions.lua, jest nie zmieniony, oraz znajduję się w poprawnej lokalizacji, błąd występuję w konsoli podczas ładowania silnika, i zawiesza się w czasie ładowania biblioteki /lib/~.lua
P-178772
» 2021-06-15 10:15:46
Na początku tego konstruktora (lub przed wejściem w ten konstruktor) wypisz na ekran:
- katalog roboczy
- datadir
Równie dobrze Twój datadir może nie być zakończony slashem, więc trafisz do nieistniejącego katalogu.
P-178773
Temat założony przez niniejszego użytkownika
» 2021-06-15 11:48:54
Po wypluciu w konsole kodu:
std::cout << "sciezka katalogu: " << datadir << std::endl;
, katalog jest ze slashem, log konsoli:
sciezka katalogu: data/

Próbowałem także znalezione w dokumentacji lua, dwóch wersji
luaState = luaL_newstate();
 oraz:
luaState = lua_open();
, jednak bez rezultatów..
P-178774
» 2021-06-15 11:54:43
No a co z working directory? Jakie jest ustawione?
P-178775
Temat założony przez niniejszego użytkownika
» 2021-06-15 13:28:15
Sciezka jest poprawna, prawdopodobnie jest to problem z przejściem bibliotek z lua50 na 5.1, cały czas walczę z naprawą tego problemu, makefile nie wyszukuje
/usr/bin/ld: cannot find -llualib5.1
, mimo że
-llua5.1
 odczytuje, EDIT: w lua5.1 prawdopodobnie nie trzeba linkować lualib, ale nie jestem pewny.. ale skoro kompilacja przechodzi bez linkowania, tylko samo -llua5.1 to biblioteki wyszukuje..
Po sukcesywnym sprawdzaniu w konsoli, dokąd ładuje się
lua_open~
 doszedłem do
luaopen_io( luaState );
 pod tą funkcją już nie wypluwa w konsoli zadnego loga.
P-178776
Temat założony przez niniejszego użytkownika
» 2021-06-15 14:56:01
Wychodzi na to, ze sama implementacja otwarcia bibliotek:
luaL_openlibs(luaState);
 wystarcza, i nie potrzebuje reszty, ale wciąz problem wystepuje
P-178777
« 1 » 2
  Strona 1 z 2 Następna strona