我正在开发一个所谓的墨盒,用于基于地理位置的WheriGo (http://wherigo.com)游戏。用于这些磁带盒的体系结构是32位和高字节顺序。但是,我的luac将创建64位和小端的块。
虽然有针对WheriGo的在线编译服务,但我更希望能够为自己生成合适的二进制格式。尤其是,因为有一些东西我宁愿在由loadstring()加载的已剥离的块中保持一点模糊,而不是拥有完整的调试信息。
所以我的问题是:生成一个lua工具链有多难,它为一个不同的架构生成字节码,而不是它运行的架构?
发布于 2013-12-06 08:34:15
您可以始终将32位大端计算机作为VM运行,例如Aurélien的prebuilt images for Debian/mips (notes)。这将是缓慢的,但工作,并可以很容易地自动化。(从squeeze升级到至少喘息,然后获得最新的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说),并且中端浮点(单字节和双字节)确实存在于野外(steve donovan和Dimiter 'malkia‘Stanev)。
如果你做了,一定要告诉我-我很感兴趣,因为我自己也是一个地理探险家(尽管我需要弄清楚如何玩弹药盒,但我的平台上没有玩家)。
发布于 2015-09-04 03:45:29
如果两台机器的浮点表示是兼容的,那么这应该只是对ldump.c和lundump.c的修改
注意确保类型(如long )的大小相同。我已经为x86,x64上的整数lua做了这个
https://stackoverflow.com/questions/18926014
复制相似问题