Lua在PowerPC/LynxOS平台上表现得很奇怪,为什么?

Hai*_* Li 7 lua powerpc lynxos

我选择Lua 5.1作为我的应用程序的嵌入式脚本语言,但当我将应用程序移植到传统平台上时,在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(;;);
}
Run Code Online (Sandbox Code Playgroud)

用PC(Visual C++ 6.0)我期待"vfoo = 5.000000"

但是对于LynxOS/PowerPC,我得到了"vfoo = 0.000000".

那么Lua在LynxOS/PowerPC上发生了什么?我想知道是否有一些big-endian机器的配置,我在"luaconf.h"中查找它但却一无所获.我也尝试了配置项"LUA_USE_POSIX"但没有帮助.

我知道它不是lua编程的典型平台.但是,欢迎任何建议,并表示赞赏.

Nat*_*ebe 2

Endian-ness 不应该影响 lua 代码的运行。我已经移植到了几个非 Win32 的平台,并且我遇到过用于将 64 位双精度转换为整数的 LUA_IEEE754TRICK 并不总是有效的情况,但默认情况下处于启用状态。尝试取消 luaconf.h 中 LUA_IEEE754TRICK 宏的定义。

我还遇到过 clib 中浮点 printf/scanf 函数损坏或不可靠的情况,我不得不编写自己的自定义版本的 lua_number2str。

不过我对你有感觉。lua 引擎是一个巨大的黑匣子,当其内部出现问题时,单步执行和调试会令人困惑。就我而言,这通常是编译器/clib 的错误,但这并不会让两者相处变得更容易。