2013-04-01 87 views
7

我選擇Lua 5.1作爲我的應用程序的嵌入式腳本語言,但是 當我將應用程序移植到傳統平臺時,在PowerPC上運行LynxOS, 的事情似乎出錯了。Lua在PowerPC/LynxOS平臺上表現怪異,爲什麼?

我得到下面的代碼在PC機上跑上跑每一件事情看起來不錯:

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

與PC(的Visual C++ 6.0)我有期待 「vfoo = 5.000000」

但隨着的LynxOS/PowerPC的我得到「vfoo = 0.000000」。

那麼,在LynxOS/PowerPC上發生了什麼?我想知道是否有一些配置 大端機,我在「luaconf.h」找了它,但什麼也沒找到。我也試過配置項「LUA_USE_POSIX」,但沒有幫助。

我知道這不是一個典型的lua編程平臺。但是,任何建議,歡迎和不勝感激。

+6

該代碼似乎是正確的。我建議你檢查'luaL_loadbuffer'和'lua_pcall'的返回值並在'lua_getglobal'後面打印'luaL_typename(L,-1)'。 – lhf

+0

有Lua測試套件。嘗試運行它們。如果有什麼東西壞了,一些測試應該會失敗,也許會給你更多關於破壞的信息。 (測試代碼密集且未註釋,但斷言行信息應足以重建發生的事情。) – nobody

回答

2

Endian-ness不應該影響lua代碼的操作。我已經移植到了幾個不是Win32的平臺,並且我遇到了用於將64位雙精度轉換爲整數的LUA_IEEE754TRICK並不總是能夠工作的時間,但默認情況下是啓用的。嘗試在luaconf.h中定義LUA_IEEE754TRICK宏。

我也遇到了clibs,其中浮點printf/scanf函數被破壞或不可靠,我不得不編寫自己的定製版本的lua_number2str。

雖然我覺得你。 lua引擎是一個大型的黑盒子,當它的內部出現問題時,它會混淆不清,並進行調試。在我的情況下,它通常是編譯器/克萊伯的錯,但是這並不能讓它們彼此相處更容易。

+0

感謝您的迴應。實際上很難在我們的PPC/LynxOS平臺上進行調試,因爲沒有有效的工具可用,這就是爲什麼我在此發佈此消息。後面的故事是這個平臺被淘汰,任何關於它的努力都不會得到任何鼓勵。 –