問題描述
Lua cư xử kỳ lạ trên nền tảng PowerPC / LynxOS, tại sao? (Lua behaves weird on PowerPC/LynxOS platform, why?)
I choose Lua 5.1 as my application's embedded scripting language, but when I port the application to a legacy platform runs LynxOS on PowerPC, thing seems going wrong.
I get following code run up on PC and every thing looks good:
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(;;);
}
with PC (Visual C++ 6.0) I got expecting "vfoo = 5.000000"
But with LynxOS/PowerPC I got "vfoo = 0.000000".
So what's going on for Lua on LynxOS/PowerPC ? I am wondering if there are some configurations for big‑endian machine, I looked for it in "luaconf.h" but find nothing. I also tried the configuration item "LUA_USE_POSIX" but no help.
I know it's not a typical platform for lua programming. However, any suggestions are welcome and be appreciated.
參考解法
方法 1:
Endian‑ness shouldn't affect the operation of the lua code. I have ported to several platforms that are not Win32, and I've run into times where the LUA_IEEE754TRICK that is used to convert a 64‑bit double into an integer does not always work, but is enabled by default. Try undefining the LUA_IEEE754TRICK macro in luaconf.h.
I have also encountered clibs where the floating point printf/scanf functions were broken or unreliable, and I had to write my own custom version of lua_number2str.
I feel for you though. The lua engine is a large, black box that is confusing to step through and debug when something goes wrong with its internals. In my case it has usually been the compiler/clib's fault, but that doesn't make it any easier to make the 2 get along with each other.
(by Haiyuan Li、Nathan Wiebe)