我只是尝试在 Windows 上使用 emscripten 将 Rust 示例项目编译为 WebAssembly,但它会导致错误。我该如何修复它?
我做了什么:
>git clone https://github.com/emscripten-core/emsdk.git
>cd emsdk
>git pull
>emsdk install latest
>emsdk activate latest
>emsdk_env.bat
Run Code Online (Sandbox Code Playgroud)
>rustup target add wasm32-unknown-emscripten
Run Code Online (Sandbox Code Playgroud)
>cargo new --bin web_assembly
>cd web_assembly
Run Code Online (Sandbox Code Playgroud)
>cargo build --target wasm32-unknown-emscripten
Compiling web_assembly v0.1.0 (F:\github\rusttest\web_assembly)
error: linking with `emcc.bat` failed: exit code: 1
|
= note: "cmd" "/c" "emcc.bat" "-s" "DISABLE_EXCEPTION_CATCHING=0" "-L" "C:\\Users\\Username\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\wasm32-unknown-emscripten\\lib" "-L" "C:\\Users\\Username\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\wasm32-unknown-emscripten\\lib\\self-contained" "F:\\github\\rusttest\\web_assembly\\target\\wasm32-unknown-emscripten\\debug\\deps\\web_assembly.web_assembly.egwz9uoo-cgu.0.rcgu.o" "F:\\github\\rusttest\\web_assembly\\target\\wasm32-unknown-emscripten\\debug\\deps\\web_assembly.web_assembly.egwz9uoo-cgu.1.rcgu.o" "F:\\github\\rusttest\\web_assembly\\target\\wasm32-unknown-emscripten\\debug\\deps\\web_assembly.web_assembly.egwz9uoo-cgu.2.rcgu.o" "F:\\github\\rusttest\\web_assembly\\target\\wasm32-unknown-emscripten\\debug\\deps\\web_assembly.web_assembly.egwz9uoo-cgu.3.rcgu.o" …Run Code Online (Sandbox Code Playgroud) 我对 C# 和依赖注入非常陌生。目前我正在开发一个新项目,希望在技术上取得进步。
在这个项目中,我遇到了三种导致循环依赖的情况。
我读了很多关于这方面的内容并找到了诸如Lazy<T>和 之类的解决方案IServiceProvider的解决方案,但我想学习针对此问题的干净解决方案,并希望遵循最常见的建议来重构代码。
在这个例子中我们有四个服务:
AccountService-> 登录、注销等
HttpService-> 做 API 的事情
LogService-> 做一些日志记录
LogRepository-> 用于 EF 的日志表/包装器的 CRUD
AccountService使用 API 通过 API 进行身份验证HttpService。后来,我想使用HttpServiceAPI 通过 API 获取更多数据。HttpService现在需要AccountService获取令牌来验证请求。这导致循环依赖错误。
账户服务
public interface IAccountService
{
Identity Identity { get; }
Task Login(Credentials Credentials);
Task Logout();
}
public class AccountService : IAccountService
{
public Identity Identity { get; private set; }
private readonly IHttpService _httpService;
private …Run Code Online (Sandbox Code Playgroud) 我写了一个小函数await来处理 go 中的异步 javascript 函数:
func await(awaitable js.Value) (ret js.Value, ok bool) {
if awaitable.Type() != js.TypeObject || awaitable.Get("then").Type() != js.TypeFunction {
return awaitable, true
}
done := make(chan struct{})
onResolve := js.FuncOf(func(this js.Value, args []js.Value) interface{} {
glg.Info("resolve")
ret = args[0]
ok = true
close(done)
return nil
})
defer onResolve.Release()
onReject := js.FuncOf(func(this js.Value, args []js.Value) interface{} {
glg.Info("reject")
ret = args[0]
ok = false
close(done)
return nil
})
defer onReject.Release()
onCatch := js.FuncOf(func(this js.Value, args []js.Value) …Run Code Online (Sandbox Code Playgroud) 为了便于讨论,假设浏览器允许WebAssembly 应用程序使用4GB 内存。忽略压缩和其他数据存储考虑因素,如果用户有一个 3GB 的本地 csv 文件,我们可以使用 WebAssembly(当然也可以是 JavaScript)完全在内存中查询该数据。例如,如果用户的数据具有以下格式:
| ID | 国家 | 数量 |
|---|---|---|
| 1 | 我们 | 12 |
| 2 | 国标 | 11 |
| 3 | 德 | 7 |
然后,在几行代码中,我们可以执行一个基本算法来过滤ID=2,即 的 SQL 等效项SELECT * FROM table WHERE id=2。
现在,我的问题是,是否有可能在任何浏览器中(并且可能使用实验标志和/或选择某些用户首选项),以便可以对不适合内存的文件进行查询,即使正确压缩也是如此。例如,在这篇博文中,加载并查询了约 500GB 的文件。我知道500GB的数据并没有完全加载到内存中,并且可能存在面向列的数据结构,因此只需要读取某些列,但无论哪种方式,操作系统都可以访问文件系统,因此文件比可以使用可用内存。
是否可以在 WebAssembly 浏览器应用程序中以任何方式执行此操作?如果是这样,如何完成的概要是什么?我知道这个问题可能需要一些研究,因此当它可以获得赏金时,我可以为其添加 500 点赏金以鼓励回答。(请注意,使用的底层语言是 C++-compiled-to-wasm,但我认为这对于这个问题来说并不重要。)
我想一种可能性可能是这样的:https://rreverser.com/web assembly- shell-with-a-real-filesystem-access-in-a-browser / 。
根据 .NET 6 中的新 Blazor WebAssembly 功能 .NET 6 中的新 Blazor WebAssembly 功能
Sqlite 与 Blazor Wasm (.NET 6) -> System.DllNotFoundException: e_sqlite3
任何人都可以在编译 Sqlite3.o 文件后获得工作示例
./polkadot build-spec --disable-default-bootnode --dev我正在使用(我正在运行版本0.9.8-3a10ee63c-x86_64-linux-gnu)创建规范
使用上述命令生成的规范包含code字段。我的理解是该字段包含 wasm 字节。然而,这些字节似乎不合适。
在.wasm文件中,前 4 个字节应该是幻数(\0asm此处),接下来的四个字节应该是 wasm 规范的版本,之后可能是其他模式。我在这些 wasm 字节中没有看到那些东西。
这是一个错误吗?它使用某种编码吗?基本上,我如何从规范中获取 wasm 字节?
我在这里发布了 JSON 规范https://gist.github.com/kishansagathiya/b38b8f06964c8cb101ccab7fbefa428d
"code": "0x52bc537646db8e0528b52ffd0058543305de8806381552107855541d2c26fa78e0cf83b70a44352557cb13532c6d0da03c59cf642396cd44daa103555dc3770d003433894b7c7055d95101002568d5f5a28e71a5e6114909a47fa095fefffdbfb7ffde5bca2da54c01351574155015a0bfbfb2adf1efab2acd5757e1d...
Run Code Online (Sandbox Code Playgroud) 我正在尝试在WebAssembly中执行计算阶乘的基本C代码,并且在Google Chrome(57.0.2987.98)中加载WASM文件时得到
CompileError:WebAssembly.compile():
Wasm解码失败结果=预期的魔术字00 61 73 6d,
找到30 30 36 31 @ + 0`
C代码:
double fact(int i) {
long long n = 1;
for (;i > 0; i--) {
n *= i;
}
return (double)n;
}
Run Code Online (Sandbox Code Playgroud)
浪费:
(module
(table 0 anyfunc)
(memory $0 1)
(export "memory" (memory $0))
(export "_Z4facti" (func $_Z4facti))
(func $_Z4facti (param $0 i32) (result f64)
(local $1 i64)
(local $2 i64)
(block $label$0
(br_if $label$0
(i32.lt_s
(get_local $0)
(i32.const 1)
)
)
(set_local $1
(i64.add …Run Code Online (Sandbox Code Playgroud) 我正在为Rust尝试新的wasm32-unknown-unknown目标,并且我遇到了调用数学函数的问题(例如sin,cos,exp,atan2).
Cargo.toml:
[package]
name = "wasm_math"
version = "0.1.0"
authors = ["..."]
[lib]
path = "src/lib.rs"
crate-type = ["cdylib"]
[dependencies]
Run Code Online (Sandbox Code Playgroud)
SRC/lib.rs:
#[no_mangle]
pub extern "C" fn invoke_sin(x: f64) -> f64 {
x.sin()
}
Run Code Online (Sandbox Code Playgroud)
index.html的:
<!doctype html>
<html lang="en">
<head><meta charset="utf-8"><title>Wasm Math</title></head>
<body></body>
<script>
const imports = { env: { } };
fetch("target/wasm32-unknown-unknown/release/wasm_math.wasm").then(response =>
response.arrayBuffer()
).then(bytes =>
WebAssembly.instantiate(bytes, imports)
).then(results => {
alert(results.instance.exports.invoke_sin(1.0));
});
</script>
</html>
Run Code Online (Sandbox Code Playgroud)
我用命令构建项目
cargo build --release --target wasm32-unknown-unknown
Run Code Online (Sandbox Code Playgroud)
当我在firefox中打开html文件时,出现以下错误:
LinkError: import object field 'sin' is not a …Run Code Online (Sandbox Code Playgroud) Webassembly是否支持触发功能?我的意思是喜欢内置支持,因为似乎我们必须从javascript导入那些。如果我们有这样的事情,那就太好了:
f32.sin
f32.cos
Run Code Online (Sandbox Code Playgroud)
如果有任何意义。如果它们不存在,我会假设它是因为实现非常依赖于系统。
问题:
想象我们有一个涉及这些数学函数的非常复杂且计算量大的公式。我想在不依赖导入或细分我的代码的情况下计算webassembly中的所有内容,其中一部分在webassembly中运行,另一部分在javascript中运行。
除此之外,我确实相信,如果内置了trig函数,则在语义上看起来会更整洁。
我在我的Web服务器上运行了一些c ++二进制文件来进行一些计算,我正在考虑使用Webassembly将它移动到用户端.我的问题是我的c ++代码将如何私有化?是否可以将已编译的Webassembly文件转换回c ++?
webassembly ×10
rust ×3
emscripten ×2
.net ×1
blazor ×1
c# ×1
c++ ×1
go ×1
javascript ×1
polkadot ×1
rest ×1
rustup ×1
sqlite ×1
substrate ×1
trigonometry ×1
windows ×1