multithreading - 将 emscripten webassembly 线程 (C++) 与 webpack (create-react-app) 一起使用
问题描述
我有一个 emscripten/webassembly 包装的 C++ 类,它在内部启动和使用 pthread。在其独立开发沙箱中的 Chrome 上的 javascript 中使用时,它通常可以正常工作。但是,我不能真正让它与 create-react-app 和 webpack 一起工作(即我使用 react-app-rewired 来配置 webpack)。
问题似乎来自线程化 emscripten 构建创建的 javascript 和 wasm 文件的复杂性,以及这些脚本由于 webpack 生成的文件重命名而造成的混乱。为多线程 emscipten 构建生成的文件是:
MyModule.js
MyModule.wasm
MyModule.worker.js
我可以(我认为)通过使用'方法让它在只有一个MyModule.js
和一个MyModule.wasm
文件的非线程模式下工作。但是,由于文件在 WebWorker 中自行启动的新文件的引入,系统变得非常混乱。当然,该文件还需要找到并访问,这也会丢失(即由于 webpack 重命名而无法找到正确的文件名)。Module
locateFile
MyModule.worker.js
MyModule.js
MyModule.worker.js
MyModule.wasm
无论如何,我已经花了几个小时在网上搜索任何像这样的成功用例,并尝试了可能的事情,包括手动编辑MyModule.js
和MyModule.worker.js
文件,但到目前为止没有任何运气。
有没有人成功地尝试过这样的事情,或者任何其他关于让多线程 emscripten/wasm 构建与 webpack(或 create-react-app)正常运行的建议?任何建议将不胜感激。
注意:这个问题不是关于在 web-worker 线程中运行 emscripten/webassembly 模块(尽管最后我将在 web-worker 中运行所有这些)。它特别是关于多线程 emscripten 构建(即带有 pthreads 的 C++)启动和使用 webpack 正确运行。
解决方案
在 Module 的 locateFile 中,您应该返回 MyModule.wasm 和 MyModule.worker.js 的正确路径。此外,在 Module 的 mainScriptUrlOrBlob 中,您应该为 MyModule.js 分配路径。mainScriptUrlOrBlob 在 worker 中用于加载 wasm。
推荐阅读
- mysql - SQL 查询、JOIN 和 CASE 语句给出错误
- mysql - 使用 WHERE 子句时 MySQL 查询不显示所有数据
- amazon-web-services - regexp_count 返回不正确的计数(Redshift)
- python-3.x - Fastai v2 IndexError:目标 2 超出范围
- python - 一个接一个地运行许多python脚本
- android - 仅在前台应用:如何避免“未声明后台位置访问”
- android - 如何以拆分模式打开另一个应用程序 [android]
- azure - How to use webapi for uploading and downloading any files from Azure Blob Storage?
- git - 具有工作副本自动同步的版本控制系统
- swift - 同步一组异步函数