2013-04-01 25 views
7

Wybieram Lua 5.1 jako wbudowany język skryptowy mojej aplikacji, ale po przeniesieniu aplikacji na starszą platformę uruchamia LynxOS na komputerze PowerPC, wszystko wygląda nie tak.Lua zachowuje się dziwnie na platformie PowerPC/LynxOS, dlaczego?

dostaję następujący kod uruchomić się na komputerze i wszystko wygląda dobrze:

void test_lua() 
{ 
    const char *code = "foo = 5\n"; 
    double vfoo=0; 
    lua_State *L = luaL_newstate(); 

    (void)luaL_loadbuffer(L, code, strlen(code), "line"); 
    (void)lua_pcall (L, 0, 0, 0); 

    lua_getglobal(L, "foo"); 
    vfoo = lua_tonumber(L, -1); 

    lua_close(L); 

    myTrace("vfoo = %f", vfoo); 
    for(;;); 
} 

z PC (Visual C++ 6.0) mam oczekując "vfoo = 5.000000"

Ale z lynxos/PowerPC I otrzymałem "vfoo = 0.000000".

Co się dzieje dla Lua na LynxOS/PowerPC? Zastanawiam się, czy istnieje kilka konfiguracji dla maszyny big-endian, szukałem go w "luaconf.h", ale nic nie znaleźć. Wypróbowałem również element konfiguracji "LUA_USE_POSIX", ale bez pomocy.

Wiem, że to nie jest typowa platforma do programowania lua. Jednak wszelkie sugestie są mile widziane i doceniane.

+6

Kod wydaje się być prawidłowy. Proponuję sprawdzić wartości zwracane przez 'luaL_loadbuffer' i' lua_pcall' i wydrukować 'luaL_typename (L, -1)' po 'lua_getglobal'. – lhf

+0

Istnieją zestawy testów Lua w . Spróbuj je uruchomić. Jeśli coś jest uszkodzone, niektóre testy powinny zakończyć się niepowodzeniem, może dać ci więcej informacji na temat tego, co jest uszkodzone. (Kod testowy jest gęsty i odkomentowany, ale informacja o wierszu assert powinna wystarczyć do odtworzenia tego, co się stało). – nobody

Odpowiedz

2

Endian-ność nie powinna wpływać na działanie kodu lua. Mam portowane na kilka platform, które nie są Win32 i uruchomiłem się w czasach, w których LUA_IEEE754TRICK, który jest używany do konwersji 64-bitowego double do liczby całkowitej, nie zawsze działa, ale jest domyślnie włączony. Spróbuj niezdefiniować makro LUA_IEEE754TRICK w luaconf.h.

Napotkano również clibs, w których funkcje zmiennoprzecinkowe printf/scanf były zerwane lub nierzetelne, i musiałem napisać własną niestandardową wersję lua_number2str.

Czuję się jednak dla ciebie. Silnik lua to duże, czarne pudełko, które jest mylące, aby przejść i debugować, gdy coś pójdzie nie tak z jego wewnętrznymi. W moim przypadku była to zazwyczaj wina kompilatora/clib, ale to wcale nie sprawia, że ​​łatwiej się dogadać ze sobą.

+0

Dzięki za odpowiedź. Właściwie trudno jest debugować naszą platformę PPC/LynxOS, ponieważ nie jest dostępne żadne skuteczne narzędzie, dlatego publikuję tę wiadomość tutaj. Późniejsza historia jest eliminowana z platformy i żaden wysiłek związany z nią nie jest już zachęcający. –