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

我选择将 Lua 5.1 作为我的应用程序的嵌入式脚本语言,但当我将应用程序移植到运行 LynxOS(PowerPC)的遗留平台时,似乎出现了问题。

以下代码在 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 上使用 Lua 出了什么问题呢?我想知道是否有一些针对 big-endian 机器的配置,我在“luaconf.h”中查找了一下,但找不到任何有关的信息。我也尝试了配置项“LUA_USE_POSIX”,但没有帮助。

我知道这不是典型的 Lua 编程平台。但是,欢迎任何建议并将不胜感激。

点赞
用户1368932
用户1368932

Endian-ness 不应该影响 Lua 代码的运行。我已经将它移植到了一些非 Win32 平台上,有时候我遇到 LUA_IEEE754TRICK64 位 double 转换为整数的方法并不总是有效,但是这个方法是默认启用的。您可以尝试在 luaconf.h 中取消定义 LUA_IEEE754TRICK 宏。

我还遇到过一些 clib 的浮点数 printf/scanf 函数损坏或者不可靠,我不得不编写自己的 lua_number2str

我感同身受。Lua 引擎是一个巨大的黑匣子,当其内部出现问题时,步进和调试是非常困难的。在我的案例中,通常是编译器/clib 的问题,但这并不会让它们之间的协作更加容易。

2013-11-24 08:39:14