标签: webassembly

如何在编译为WebAssembly的Rust库中使用C库?

我正在尝试使用Rust,WebAssembly和C互操作性,最终在浏览器或Node.js中使用Rust(带有静态C依赖)库.我正在使用wasm-bindgenJavaScript胶水代码.

#![feature(libc, use_extern_macros)]
extern crate wasm_bindgen;

use wasm_bindgen::prelude::*;
use std::os::raw::c_char;
use std::ffi::CStr;

extern "C" {
    fn hello() -> *const c_char; // returns "hello from C" 
}

#[wasm_bindgen]
pub fn greet() -> String {
    let c_msg = unsafe { CStr::from_ptr(hello()) };
    format!("{} and Rust!", c_msg.to_str().unwrap())
}
Run Code Online (Sandbox Code Playgroud)

我的第一个天真的方法是使用一个build.rs脚本,使用gcc crate从C代码生成一个静态库.在介绍WASM位之前,我可以编译Rust程序并hello from C在控制台中查看输出,现在我从编译器中得到错误说

rust-lld: error: unknown file type: hello.o
Run Code Online (Sandbox Code Playgroud)

build.rs

extern crate gcc;                                                                                         

fn main() {
    gcc::Build::new()
        .file("src/hello.c")
        .compile("libhello.a");
}
Run Code Online (Sandbox Code Playgroud)

这是有道理的,现在我考虑一下,因为该hello.o文件是为我的笔记本电脑架构而不是WebAssembly编译的.

理想情况下,我希望这可以开箱即用,在我的build.rs中添加一些魔法,例如将C库编译为Rust可以使用的静态WebAssembly库.

我认为这可行,但是想避免,因为它听起来更有问题,是使用Emscripten为C代码创建WASM库,然后单独编译Rust库并将它们粘合在一起.

javascript c rust webassembly

25
推荐指数
1
解决办法
1533
查看次数

如何检查浏览器是否支持WebAssembly?

由于支持WebAssembly进入所有新的主流浏览器,我如何检查访问我网站的当前浏览器是否支持它?

browser webassembly

22
推荐指数
1
解决办法
6727
查看次数

使用WebAssembly调用Web API方法

是否可以将Web API与WebAssembly 一起使用?如果是这样,怎么样?我对Navigator界面更感兴趣.

webassembly

21
推荐指数
1
解决办法
3512
查看次数

缺少 Visual Studio 2019 blazor webassembly 应用程序模板

我将 vs 2019 16.3.10 更新为 16.4,将 .net core 3.0 更新为 .net core 3.1,但缺少 blazor Web 程序集应用程序模板。

visual-studio .net-core webassembly blazor

21
推荐指数
1
解决办法
7955
查看次数

Flutter web 应该使用 Wasm 而不是 dart2js

我发现了几篇关于 Wasm 比 JS 更快的文章[1 , 2 ]

我看到这个话题在这个旧的(封闭的)问题中被触及[3 , 4 ]

而这个看似被放弃的关于谷歌群组的讨论[5]

问题是:

为什么 flutter web 不使用 Wasm 而不是 dart2js

感谢您的时间

(也在github上问过)

dart dart2js webassembly flutter flutter-web

20
推荐指数
2
解决办法
6249
查看次数

在 WebAssembly 中访问 DOM

我最近开始在我的一些项目中使用 WebAssembly。我这样做是因为我听说 Wasm 比 javaScript 快。
当我真正开始我的第一个 Wasm 项目时,我意识到我不知道如何在 C++ 中操作 DOM。
有没有办法使用 Wasm 来做到这一点?

webassembly

20
推荐指数
2
解决办法
9151
查看次数

将 C# 项目编译为 WebAssembly

我需要将 C# 项目编译为 WebAssembly,并能够从 JavaScript 调用一些方法。

我想在需要添加一些新功能的旧 ASP.NET MVC 4 应用程序中使用它,并且我更喜欢使用 C# 而不是 JavaScript/TypeScript。

理想情况下,我想使用 .Net 6 编译为 WebAssembly,但我可以使用任何其他替代方案。

我在 Windows 10 版本 21H1(操作系统内部版本 19043.1415)上运行 .Net 6

我已经安装了:

  • 视觉工作室 2022
  • 工作负载“wasm-tools”(.NET WebAssembly 构建工具)

但每次我搜索有关如何使用 .NET WebAssembly 构建工具的教程、示例等时,结果都是有关 Blazor 的。

我已阅读本教程,但找不到 mono-wasm 编译器(正如我上面所说,我希望尽可能使用 .Net 6 进行编译。)

谁能帮我解决这个问题吗?

谢谢。

c# webassembly .net-6.0

20
推荐指数
1
解决办法
1万
查看次数

WebAssembly,JavaScript和其他语言

随着Web新时代的到来,WebAssembly将由Google,Microsoft,Apple和Mozilla合作设计:

WebAssembly高级目标

  1. 定义可移植,大小和加载时间有效的二进制格式作为编译目标,通过利用各种平台(包括移动和物联网)上的常用硬件功能,可以编译为以本机速度执行

阅读更多...

我想问那些已经掌握了这些知识的人:

可能有任何编程语言一旦编译成WebAssembly吗?让它成为C#,Java,Python,JavaScript,Ruby.如果是这种情况 - 网络开发人员是否可以选择任何语言来完成他现在使用JavaScript实现的目标?

javascript c# python webassembly

19
推荐指数
1
解决办法
4885
查看次数

我可以以某种方式构建webassembly代码*而不使用emscripten"glue"吗?

我可以以某种方式创建一个ism文件,这将在MDN中描述(通过实例化对象并调用它们上面的函数)吗?

我能找到的所有指南(例如MDN上的这个指南)都建议使用emscripten; 但是,它还包括~70kB"胶水代码"(具有~50 kB可选文件系统仿真),它具有额外的逻辑(如检测节点/浏览器环境和自动提取等),可能还有其他一些仿真.

如果我不想要"粘合代码"并且想直接创建WASM(可能来自C代码,但可能是其他东西)怎么办?这可能吗?

javascript emscripten webassembly

19
推荐指数
5
解决办法
4750
查看次数

如何使用 Blazor 使用 alert()、confirm() 和 prompt() 函数?

我正在学习 Blazor 技术。我在 VS 2019 中启动了一个默认的增量项目,并且我已经使用 confirm() 和 alert 修改了 Decrement 的代码,但它不起作用。

 @page "/counter"

<h1>Counter</h1>

<p>Current count: @currentCount</p>

<button class="btn btn-primary" @onclick="IncrementCount">Increment</button>
<button class="btn btn-primary btn-danger" onclick="if (confirm('Are you sure to Decrement')) { @DecrementCount() }">Decrement</button>

@code {
    private int currentCount = 0;

    private void IncrementCount()
    {
        currentCount++;
    }

    private void DecrementCount()
    {
        currentCount--;
        // alert('Operation Successfully executed')
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的代码片段中,confirm() 函数运行良好,但我想调用 Decrement 函数不起作用构建失败。我想在我的函数中添加一条成功消息。请提供任何选项,而不是使用 confirm(),alert() 函数。

c# webassembly asp.net-core blazor asp.net-core-3.1

18
推荐指数
1
解决办法
1万
查看次数