你好。解决办法有几个: C++代码里尽量不要引用内置库,比如上面的 #include <stdio.h> 。这样的好处是可以减少emcc生成的胶水代码的量emcc编译时选择精简的编译模式,避免emcc编译时自动引入了一些不需要的库最后手动修改胶水代码,以适配小程序环境,比如 WebAssembly 适配为 WXWebAssembly如果C++代码足够纯净,只用来做运算的话,那理论上emcc编译后主要产物是wasm文件,胶水js里只有很少的代码量
wasm的胶水js该如何修改以适配WXWebAssembly?比如一个最简单的hello world cpp通过Emscripten编译成hello.wasm和胶水js:hello.js. //hello.cc #include <stdio.h> #ifndef EM_PORT_API # if defined(__EMSCRIPTEN__) # include <emscripten.h> # if defined(__cplusplus) # define EM_PORT_API(rettype) extern "C" rettype EMSCRIPTEN_KEEPALIVE # else # define EM_PORT_API(rettype) rettype EMSCRIPTEN_KEEPALIVE # endif # else # if defined(__cplusplus) # define EM_PORT_API(rettype) extern "C" rettype # else # define EM_PORT_API(rettype) rettype # endif # endif #endif EM_PORT_API(int) show_me_the_answer() { return 42; } EM_PORT_API(float) add(float a, float b) { return a + b; } int main() { printf("Hello World-\n"); return 0; } 在普通的html中可以顺利调用: <script> Module = {}; Module.onRuntimeInitialized = function() { //do sth. Module._main(); console.log(Module._add(12, 1.0)); } </script> <script src="hello.js"></script> 在小程序中似乎只WXWebAssembly.instantiate(path, imports) 请问该如何修改胶水js以适配呢?WebAssembly.RuntimeError等需要修改成WXWebAssembly.xxx吗? 能否帮忙提供一个小程序调用c++ 转化的wasm的最小示例?谢谢! (或者说小程序还提供其他更方便地使用c++进行密集运算的方式吗?)
2021-11-24胶水js放在worker目录下,wasm文件放在worker目录外,这个用法没问题。 具体原因得看看代码,可以通过代码片段功能展示一下代码: https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html
worker如何使用webassembly胶水js?我用Emscripten把c函数编译生成hello.js和hello.wasm两个文件,可以在page/index.js里面require使用,但是在worker中使用就会遇到问题: 官网文档中说worker不能加载其目录以外的文件,实测也的确如此: const hello_debug=require('../pages/index/hello.js') 报错: thirdScriptError worker uncaught third Error module "pages/index/hello.js" is not defined Error: module "pages/index/hello.js" is not defined 同时: "在 Worker 内使用 WXWebAssembly 时,.wasm 文件需要放置在 worker 目录外,因为 worker 目录只会打包 .js 文件,非 .js 文件会被忽略" 我将胶水js放在worker目录下,wasm文件放在pages下, const hello_debug=require('./hello.js') 报错: thirdScriptError worker uncaught third Error module "pages/index/hello.js" is not defined Error: module "pages/index/hello.js" is not defined 请问该如何在worker中加载webassembly的胶水js文件呢?这个报错原因是啥呢,谢谢!
2021-11-22目前尚未支持 OfflineAudioContext。后续会考虑支持,也想了解一下你们使用 OfflineAudioContext 的话会用于什么场景?
小程序什么时候可以支持OfflineAudioContext?目前在2.21.0版本的基础库里,哪里都找不到OfflineAudioContext类,也没找到创建该类的API,小程序什么时候可以支持该类呢?
2021-11-22你好,麻烦在调试面板的 system 面板中看看基础库构建的时间是什么时候
ios 微信版本8.0.13 onShareAppMessage分享没有反应ios用户,点击按钮分享没有反应,无法进入好友列表。微信版本8.0.13,基础库版本2.20.2
2021-11-04你好,问题已收到,确认是新版本的bug,正在处理中
基础库2.19.6,wasm实例化操作异常慢,有办法解决么?调试工具设置基础库版本:2.19.6,真机预览WXWebAssembly.instantiate,实例化过程异常慢,大约1~2分钟可以实例化完成。 调试工具设置基础库版本:2.19.5,真机预览WXWebAssembly.instantiate,实例化过程正常,大概几十ms。 由于真机小程序的体验版是根据微信的版本设置小程序的基础库环境,所以在测试体验版时遇到wasm 实例化比较慢的问题, 1.想问一下这种情况可以怎么处理。 2.正式上线的小程序是否会有别的处理 代码片段:https://developers.weixin.qq.com/s/UqxKGEmT7ntp
2021-09-28你好,可以描述一下你们的使用场景吗,我们会考虑在后续支持
WebAudioContext什么时候可以支持AnalyserNode呢?WebAudioContext什么时候可以支持AnalyserNode呢?
2021-09-26是否用到了 useWebAudioImplement ?
为什么setInnerAudioOption({obeyMuteSwitch: false})无效?System: Iphone, IOS 14.7.1, WeChat 8.0.10 WeChatLib: 2.19.5 // app.js中 onShow: function () { wx.setInnerAudioOption({ obeyMuteSwitch: false, mixWithOther: false, success() { console.log('set audio option success') }, fail(e) { console.error(e) } }) } 在开发版中可以看到设置成功,但静音模式下依然听不到音频的声音。
2021-09-22[图片]
小游戏IOS端在主线程无法收到worker线程发过来的消息,怎么解决?//game.js console.log("线程", " 函数", " 数据") const worker = wx.createWorker('workers/index.js') worker.onMessage(function(e){ console.log("main", "onMessage", e) }) worker.postMessage({msg:6}) console.log("main", "postMessage",{msg:6}) worker.postMessage({msg:12}) console.log("main", "postMessage",{msg:12}) //workers/index.js function postMessage(s) { worker.postMessage(s) console.log("worker", "postMessage", s) } worker.onMessage(function (e) { console.log("worker", "onMessage", e) setTimeout(() => { postMessage(e.msg + 100) }, 1000); }) 运行后: [图片]
2021-09-13你这个写法是有点问题,创建worker的过程开销是比较大的,不应该每帧去创建一个worker。 改成这样就好了: let worker = wx.createWorker('workers/index.js'); const dt = 1000 / 4; let test1 = 10; let test2 = 2; let timer worker.onMessage(function (res) { console.log('这是主线程打印的') console.log(res) }); const update = () => { var sendTime = Date.now() test1++; test2++; if (test2 >= 10) return worker.postMessage({ x: test1, y: test2, }); // console.log('当前dt时间:',sendTime) // setTimeout(update, dt); requestAnimationFrame(update) } // update(); requestAnimationFrame(update)
worker使用问题将游戏的物理系统放到worker中进行,游戏过程中会有点击事件生成新的物体,物体需要添加到worker的物理计算中。 所以游戏方即需要接受worker的数据也需要发送数据到worker(有点击事件,所以需要点击后即时响应生成一个新的使用物理的物体)。 官方demo不存在实时生成的效果,所以想问一下是否是我的使用方式不对。 目前直接在微信端模拟需要每帧获取数据的操作,代码如下 const update = () => { var sendTime = Date.now() test1++; test2++; if (worker) { worker.terminate() } worker = wx.createWorker('workers/index.js') worker.postMessage({ x: test1, y: test2, }); worker.onMessage(function (res) { console.log('这是主线程打印的') console.log(res) console.log('间隔时间:', Date.now() - sendTime) }); // console.log('当前dt时间:',sendTime) // setTimeout(update, dt); requestAnimationFrame(update) } worker端代码如下 worker.onMessage(function (res) { console.log('这是worker内部线程打印的') console.log(res) let sum = add(res.x, res.y); worker.postMessage({ sum: sum }) }); function add(x, y) { return x + y; } 目前是疯狂警告,并且大概率上不会执行到worker的代码。 [图片]
2021-09-01你好。 [图片] 目前 wx.createWebAudioContext 是beta功能,还在灰度测试过程中,尚未全量开放。其中,开发者工具和iOS端已支持调试,安卓正在灰度中。建议使用二维码预览进行调试
微信开发者工具创建WebAudioContext 对象正常,在真机调试就报错?需要播放AudioBuffer文件,因此先wx.createWebAudioContext()创建对象,在微信开发者工具上创建成功,在真机调试就失败,这是因为什么原因呢? 手机的基础库版本是2.19.2,安卓跟苹果手机都试了,也是报错,求讲解 [图片] 开发者工具正常 [图片] 真机调试的异常 [图片]
2021-08-19