我正在开发一个所谓的墨盒,用于基于地理位置的WheriGo(http://wherigo.com)游戏。用于这些盒式磁带的体系结构是32位和大端。但是,我的luac将创建64位和小端的块。
虽然有一个WheriGo的在线编译服务,但我宁愿能够为自己生成适当的二进制格式。特别是,因为有些东西我宁愿在剥离的块中隐藏一些,由loadstring()
加载,而不是提供完整的调试信息。
所以我的问题是:生成一个lua工具链有多难,它为不同的体系结构生成字节代码,而不是它运行的那个?
答案 0 :(得分:1)
您可以随时将32位大端机器作为VM运行,例如Aurélien的prebuilt images为Debian / mips(notes)。它会很慢但很有效,并且可以轻松实现自动化。 (至少要从挤压中升级,然后获得最新的Lua。)
我经常运行这样的虚拟机......它很慢,但我认为它是批处理:我开始一个工作(apt或编译),然后偶尔看一下(或者:第二天)查看是否它结束了。大多数时候,这很好用;有些事情当然不能在仿真中正常工作(例如由于模拟器错误或差异),但为了获得32位Lua的大端,这可能会有效。)
建议阅读:lua bytecode portability和middle-endian doubles on ARM(均在lua邮件列表中) - 由于PocketPC计算机主要是ARM,因此您可能遇到此问题。最好检查实际的Wherigo墨盒,看看他们使用的设置......
这些帖子的要点是:字节序,sizeof(int)
,sizeof(size_t)
,sizeof(Instruction)
,sizeof(lua_Number)
和lua_Number
的类型必须相同字节码与架构兼容(Luiz Henrique de Figueiredo说),中端花车(单人和双人)确实存在于野外(史蒂夫·多诺万和迪米特·马尔基亚·斯塔内夫)。
告诉你是否这样做 - 我很感兴趣,因为我自己是一名地理学家(虽然需要弄清楚如何弹奏墨盒,没有播放器用于我的平台)。
答案 1 :(得分:1)
如果两台机器的浮点表示兼容,那么这应该只是对ldump.c和lundump.c的修改。
注意确保类型E.g.长的是相同的大小。我在x86,x64
上为整数lua做了这个