9

我正在为基于地理位置的WheriGo ( http://wherigo.com ) 游戏开发所谓的墨盒。用于这些磁带的架构是 32 位和大端。但是,我的 luac 将创建 64 位和小端的块。

虽然有针对 WhiriGo 的在线编译服务,但我宁愿能够为自己生成正确的二进制格式。特别是,因为有些事情我宁愿在一个剥离的块中保持一点模糊,由 加载loadstring(),而不是提供完整的调试信息。

所以我的问题是:生成一个 lua 工具链有多难,它为不同的架构生成字节码,而不是运行它的架构?

4

2 回答 2

1

您总是可以将 32 位大端机器作为 VM 运行,例如 Aurélien为 Debian/mips预先构建的映像(注释)。它会很慢但是很有效并且可以很容易地自动化。(做一个 dist-upgrade 到至少 wheezy 从squeeze,然后得到最新的 Lua。)

我已经经常运行这样的虚拟机......它很慢,但我认为它是批处理:我开始一项工作(apt 或 compile),然后偶尔(或:第二天)查看它是否完成。大多数情况下,这效果很好。当然,有些事情在仿真中不能正常工作(例如,由于仿真器错误或差异),但要获得大端 32 位 Lua,这可能会起作用)。

推荐阅读: ARM 上的lua 字节码可移植性中端双精度(都在 lua 邮件列表中)——因为 PocketPC 机器大多是 ARM,你可能会遇到这种情况。最好检查一下真正的 Whirigo 墨盒,看看他们使用了哪些设置……</p>

这些帖子的要点是:字节序、sizeof(int)sizeof(size_t)sizeof(Instruction)sizeof(lua_Number)和类型lua_Number必须相同才能使字节码跨架构兼容(Luiz Henrique de Figueiredo 说),并且中端浮点数(单字节和双字节)确实存在野生(史蒂夫多诺万和迪米特'malkia'Stanev)。

一定要告诉你是否这样做 - 我很感兴趣,因为我自己就是一个地理学家(虽然需要弄清楚如何玩卡带,我的平台没有播放器)。

于 2013-12-06T00:34:15.113 回答
1

如果两台机器的浮点表示是兼容的,那么这应该只是对 ldump.c 和 lundump.c 的修改

注意确保类型 Eg long 的大小相同。我已经为 x86,x64 上的整数 lua 做了这个

于 2015-09-03T19:45:29.303 回答