2013-04-01 13 views
7

Scelgo Lua 5.1 come linguaggio di scripting incorporato della mia applicazione, ma quando porto l'applicazione su una piattaforma legacy su LynxOS su PowerPC, sembra andare storto.Lua si comporta in modo strano sulla piattaforma PowerPC/LynxOS, perché?

ottengo seguente codice eseguito su PC e ogni cosa sembra buono:

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(;;); 
} 

con il PC (Visual C++ 6.0) mi sono in attesa "vfoo = 5,000 mila"

Ma con LynxOS/PowerPC I ottenuto "vfoo = 0.000000".

Quindi cosa succede a Lua su LynxOS/PowerPC? Mi chiedo se ci siano alcune configurazioni per la macchina big-endian, l'ho cercata in "luaconf.h" ma non trovo nulla. Ho anche provato la voce di configurazione "LUA_USE_POSIX" ma nessun aiuto.

So che non è una piattaforma tipica per la programmazione lua. Tuttavia, ogni suggerimento è benvenuto ed apprezzato.

+6

Il codice sembra giusto. Suggerisco di controllare i valori di ritorno di 'luaL_loadbuffer' e' lua_pcall' e di stampare 'luaL_typename (L, -1)' dopo 'lua_getglobal'. – lhf

+0

Ci sono test suite Lua su . Prova a eseguirli. Se qualcosa è rotto, alcuni test dovrebbero fallire, magari dandoti più informazioni su ciò che è rotto. (Il codice del test è denso e non commentato, ma le informazioni sulla linea dovrebbero essere sufficienti per ricostruire quello che è successo.) – nobody

risposta

2

L'endianità non deve influire sul funzionamento del codice lua. Ho eseguito il porting su diverse piattaforme che non sono Win32 e ho incontrato tempi in cui il LUA_IEEE754TRICK utilizzato per convertire un doppio a 64 bit in un numero intero non sempre funziona, ma è abilitato per impostazione predefinita. Prova a definire la macro LUA_IEEE754TRICK in luaconf.h.

Ho riscontrato anche delle interruzioni in cui le funzioni printf/scanf in virgola mobile erano rotte o inaffidabili e dovevo scrivere la mia versione personalizzata di lua_number2str.

Mi sento comunque per te. Il motore lua è una grande scatola nera che confonde il passaggio e il debug quando qualcosa va storto con i suoi interni. Nel mio caso di solito è stata colpa del compilatore/clib, ma ciò non rende più facile far andare i 2 insieme.

+0

Grazie per la risposta. In realtà è difficile eseguire il debug sulla nostra piattaforma PPC/LynxOS perché non è disponibile uno strumento efficiente, ecco perché inserisco questo messaggio qui. La storia successiva è che la piattaforma è stata eliminata e qualsiasi tentativo non è più incoraggiato. –