7

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

使用 PC (Visual C++ 6.0) 我期待“vfoo = 5.000000”

但是使用 LynxOS/PowerPC 我得到了“vfoo = 0.000000”。

那么 LynxOS/PowerPC 上的 Lua 发生了什么?我想知道大端机器是否有一些配置,我在“luaconf.h”中寻找它,但什么也没找到。我也尝试了配置项“LUA_USE_POSIX”但没有帮助。

我知道这不是 lua 编程的典型平台。但是,欢迎提出任何建议并予以赞赏。

4

1 回答 1

2

字节序不应该影响 lua 代码的操作。我已经移植到几个不是 Win32 的平台,并且我遇到过用于将 64 位双精度转换为整数的 LUA_IEEE754TRICK 并不总是有效,但默认情况下已启用。尝试在 luaconf.h 中取消定义 LUA_IEEE754TRICK 宏。

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

不过我对你有感觉。lua 引擎是一个大而黑的盒子,当它的内部出现问题时,它会让人难以单步调试和调试。在我的情况下,这通常是编译器/clib 的错,但这并没有让两者更容易相处。

于 2013-11-24T08:39:14.010 回答