- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不知道如何使用 wasm 编译器在 React 代码中加载 C++ 函数。
我的 C++ 由两个文件组成,编译后生成一个 160kb 的 wasm 文件。这是我目前用于编译的命令(在 macOS 上运行)。
em++ ../main.cpp ../stringFormat.cpp -s WASM=1 -s EXPORT_ALL=1 -s MODULARIZE=1 -O3 --closure 1 -o lss.js -std=c++11
src
- utils
- wasm
lss.js
lss.wasm
import * as lss from '../wasm/lss'
./src/utils/wasm/lss.js
Line 10:6: Expected an assignment or function call and instead saw an expression no-unused-expressions
Line 11:69: Expected an assignment or function call and instead saw an expression no-unused-expressions
Line 11:117: 'read' is not defined no-undef
Line 11:197: 'readbuffer' is not defined no-undef
Line 11:214: 'read' is not defined no-undef
Line 11:336: 'quit' is not defined no-undef
Line 11:367: Unexpected use of 'print' no-restricted-globals
Line 11:430: Unexpected use of 'print' no-restricted-globals
Line 11:493: 'printErr' is not defined no-undef
Line 12:1: Unexpected use of 'print' no-restricted-globals
Line 12:22: Expected an assignment or function call and instead saw an expression no-unused-expressions
Line 12:26: Unexpected use of 'self' no-restricted-globals
Line 14:307: Expected an assignment or function call and instead saw an expression no-unused-expressions
Line 23:174: Expected an assignment or function call and instead saw an expression no-unused-expressions
Line 29:10: Expected an assignment or function call and instead saw an expression no-unused-expressions
Line 29:152: 'readline' is not defined no-undef
Line 29:260: Expected an assignment or function call and instead saw an expression no-unused-expressions
Line 29:350: Expected an assignment or function call and instead saw an expression no-unused-expressions
Line 29:433: Expected an assignment or function call and instead saw an expression no-unused-expressions
Line 30:19: Expected an assignment or function call and instead saw an expression no-unused-expressions
...
// My util function to load wasm file to js
const loadWebAssembly = (filename, imports = {}) =>
WebAssembly
.instantiateStreaming(fetch(filename), imports)
.then(({instance}) => instance.exports);
// wasm file is now in my static folder, in public/
const lss = loadWebAssembly('wasm/lss.wasm')
// splitIntoCommonSequences is the C++ function I try to call
.then(module => Promise.resolve(module.splitIntoCommonSequences));
export {lss};
WebAssembly.instantiate(): Import #0 module="env" error: module is not an object or function
最佳答案
所以我发现他们有更多的步骤来让 WASM 二进制文件与 React 一起工作,特别是如果你想将它导入 React es6 模块(而不是从公共(public)文件夹)。
我不认为这是一个通用的解决方案,只是对我有用的一个(并且似乎在大多数情况下都有效)。
编译器标志
这是我现在使用的 em++ build 命令:
em++ ../main.cpp ../stringFormat.cpp \
-Os -g1 \
-s WASM=1 \
-s MALLOC=emmalloc \
-s ALLOW_MEMORY_GROWTH=1 \
-s EXPORT_ES6=1 \
-s MODULARIZE=1 \
-s 'EXPORT_NAME="LongerSubSequence"' \
-s 'ENVIRONMENT="web"' \
--bind \
-o lss.mjs \
-std=c++11 || exit 1
My_React_Project
|_public
| |_/path/to/lss.wasm
|
|_src
|_/path/to/lss.mjs
/* eslint-disable */
在文件顶部,以避免 React 语法错误。 var _scriptDir = import.meta.url;
与 var _scriptDir = '/path/to/lss.wasm';
,相对于公用文件夹。不确定它对于以下步骤是否有用,但 React 只会因 import.meta 语法而崩溃。 scriptDirectory = self.location.href;
与 scriptDirectory = window.self.location.href;
,因为 React es6 函数没有绑定(bind)到窗口。 var dataURIPrefix = "data:application/octet-stream;base64,";
function isDataURI(filename) {
return String.prototype.startsWith ? filename.startsWith(dataURIPrefix) : filename.indexOf(dataURIPrefix) === 0;
}
var wasmBinaryFile = "lss.wasm";
与 const wasmBinaryFile = '/path/to/lss.wasm';
('/' 将指向公用文件夹)。 if (!isDataURI(wasmBinaryFile)) {
wasmBinaryFile = locateFile(wasmBinaryFile);
}
function getBinary() {
try {
if (wasmBinary) {
return new Uint8Array(wasmBinary);
}
if (readBinary) {
return readBinary(wasmBinaryFile);
} else {
throw "both async and sync fetching of the wasm failed";
}
} catch (err) {
abort(err);
}
}
getBinaryPromise()
具有以下功能:const getBinaryPromise = () => new Promise((resolve, reject) => {
fetch(wasmBinaryFile, { credentials: 'same-origin' })
.then(
response => {
if (!response['ok']) {
throw "failed to load wasm binary file at '" + wasmBinaryFile + "'";
}
return response['arrayBuffer']();
}
)
.then(resolve)
.catch(reject);
});
if (!wasmBinary && typeof WebAssembly.instantiateStreaming === "function" && !isDataURI(wasmBinaryFile) && typeof fetch === "function")
if (!wasmBinary && typeof WebAssembly.instantiateStreaming === "function" && typeof fetch === "function")
import LongerSubSequenceGlue from 'path/to/lss.mjs';
// Avoid main function running if you just want to use another function
const lssModule = LongerSubSequenceGlue({
noInitialRun: true,
noExitRuntime: true
});
//...
lssModule.my_cpp_function(...my_params);
关于reactjs - 在 React 中为大文件(超过 4kb)加载 WASM 模块的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60363032/
我将文件读入字符串,更改第一行,然后将此字符串写入新文件。我通过以下代码(稍微缩短了一点)来做到这一点: while(jspIterator.hasNext()){
adb shell dumsys meminfo返回的内存是kB还是KB? 哪里: kB = 1000 bytes KB = 1024 bytes 最佳答案 它是 KB(1024 字节)或 ki
我能够解析 xml 文件,并且我想下载 xml 给出的 url 的文件。我有以下代码: try{ /* Create a URL we want to load some xm
这个问题在这里已经有了答案: Android, Compressing an image (2 个答案) 关闭 10 个月前。 我正在 android 中开发一个应用程序,它将捕获照片并存储在 sq
我将文件保存在我的 MySQL 数据库中的 LONGBLOB 列上,当我在我的 IDE 中执行选择时,我注意到一些 base64 文件内容有消息 206.2 kB (204.8 kB loaded)放
使用 Indy 的 TIdTCPServer 组件,一个包被分两部分接收,但客户端发送了一个 64 KB 的包。 如何在服务器 OnExecute 事件中接收完整的包? 现在我放了一个原型(proto
我正在编写一个正则表达式,它可以捕获一个值及其后面的任何 mb、kb、gb、字节正则表达式是: (?\p{N}+)(?:\s*)(?[mb|kb|gb|b|bytes]) 但是当给定输入“40
我刚刚创建了 range(1,100000) 的 python 列表. 使用 SparkContext 完成以下步骤: a = sc.parallelize([i for i in range(1,
我的要求是将相机捕获的图像上传到服务器,但它应该小于 500 KB。如果大于 500 KB,则需要减小到小于 500 KB (但稍微接近) 为此,我使用以下代码 - @Override pub
我有以两种不同方式加载和保存图像的代码-第一种使用openCV,第二种使用PIL。 import cv2 from PIL import Image img = cv2.imread("/home/m
我有一个 android 视频播放器,它显示 SD 卡上的所有视频名称和文件大小,但大小以字节显示,我无法将它转换为 KB、MB、GB 等。我尝试除以 int值增加 1024 但它不起作用。它打印出错
任何人都可以向我解释一下摘要报告中如何测量吞吐量、Kb/秒和平均字节数吗? 我得到了以下登录操作的总结报告。 Label : Login Action(sampler) Sample# : 1 ave
我需要将上传图片的大小调整为最大 100 kB。可能吗? 例如:尺寸为 1200x600 的 image1.jpg 有 280kB,我需要将其调整为 <100kB。 最佳答案 ImageMagick
我需要将上传图片的大小调整为最大 100 kB。可能吗? 例如:尺寸为 1200x600 的 image1.jpg 有 280kB,我需要将其调整为 <100kB。 最佳答案 ImageMagick
我有例如: Document doc = Jsoup.connect("http://example.com/").get(); String title = doc.title(); Documen
我正忙于Android通话录音机,当我调用电话时录音机显示它正在录音,在我挂断电话后,它保存文件,但保存的文件是0 KB 有没有人遇到同样的问题,请帮我解决一下。 这是我的录制代码 recorder
我正在以 KB 为单位将文件存储在数据库中。我尝试将文件信息返回的文件长度转换为 KB,如下所示。 FileInfo FileVol = new FileInfo(DownloadPath); int
在我的应用程序中,显示照片中的所有视频。选择视频后,将使用 avplayer 播放该视频。但是当我尝试获取所选视频文件的大小(kb)时,它显示错误。当我尝试复制视频文件时出现同样的错误。 我已获取这些
我正在尝试在 firebase 存储中上传图像,我希望图像不应大于 50 kb 我正在尝试获取位图的大小,以便我可以知道位图的大小是否超过 50 kb这图片不会显示在画廊中 我已经尝试了许多人建议的代
在我的 android 应用程序中,它收集了一些数据和照片扔手机。 之后它将所有这些东西插入到一个对象中,然后将这个对象发送到服务器。 在将此对象发送到服务器之前,我想向用户显示数据的大小以及将此数据
我是一名优秀的程序员,十分优秀!