Creativess 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: 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 ); luaopen_base( luaState ); luaopen_math( luaState ); luaopen_string( luaState ); luaopen_io( luaState ); luaL_dofile( luaState, std::string( datadir + "actions/lib/actions.lua" ).c_str() ); 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() ); 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. |
|
DejaVu |
» 2021-06-15 10:04:02 |
|
Creativess 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 |
|
DejaVu |
» 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. |
|
Creativess 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.. |
|
DejaVu |
» 2021-06-15 11:54:43 No a co z working directory? Jakie jest ustawione? |
|
Creativess 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. |
|
Creativess 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 |
|
« 1 » 2 |