微信小程序,微信小游戏调用WebAssembly
微信小程序和小游戏本质上是浏览器小程序和小游戏的区别是游戏里面只有主进程所以两者调用wasm会有同步异步之分。微信官方文档资料太少没有具体如何调用但是浏览器内核都是一样的微信只不过把WebAssembly封装成了WXWebAssembly支持了压缩思路都是一样的。开维游戏引擎内核c编写v8引擎封装游戏函数Assembly实现htm跨平台高效运行。编译wasm需要支持导出微信小游戏期间遇到的问题解决时网上资料很少我们补充一下也建议微信小游戏官方文档能补充详细的实例和文档说明。1. wasm编译wasm的编译是把c或rust等语言编译成汇编语言编译优化选项慎用特别是优化编译因为编译后有javascript脚本语言作为胶水代码即解析调用wasm的这部分代码如果优化太狠生成的js也会跟着优化甚至函数名称都会改变。微信中的浏览器会因为函数名对不上导致加载失败。原因是胶水代码调用wasm没问题他们是可以对上的emcc编译的时候已经做了对应但是微信中的浏览器不知道他是按照默认的函数名称调用的所以就会出问题。引擎移植遇到最多的问题之一就是链接函数找不到无论是杀毒引擎还是游戏引擎等都会遇到符号表找不到问题本质上是coff文件或者其他中间文件要根据符号表链接编译选项不同符号表也不一样即便编译选项一样关键字不同也会导致符号名称不同例如会加后面的数值也不同所以理解这个原因后查问题就很容找到首先要排除函数名称对应不上的问题可以用ida反编译wasm看一下就很清楚了。2. 微信小游戏内存微信小游戏内存分页有限制需要做限定。另外他对浏览器做了修改对堆栈的管理等做了限制。有时候发现正常的浏览器可以微信小游戏不行是因为递归或者嵌套调用过多导致崩溃因为微信为了保证用户在一个小沙盒内对各种调用做了限定包括包大小的限定等。3. 函数调用微信小游戏的函数不完全支持时需要自己补函数原理类似coff文件中链接到自己的一个函数把函数地址回填到相应的内存地址中hook加壳jmp替换函数内存补丁都是这个原理。4. 微信小游戏中wasm适用范围一般情况浏览器支持的功能微信小游戏都会支持例如对类的支持对文件系统的支持。因为微信小游戏浏览器也不会改太多例如对胶水代码的加载调用除了封装WXWebAssembly外基本没太多变化。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2579703.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!