IT评测·应用市场-qidao123.com技术社区
标题:
C/C++与JavaScript的WebAssembly编程(一)
[打印本页]
作者:
农妇山泉一亩田
时间:
2025-4-2 19:42
标题:
C/C++与JavaScript的WebAssembly编程(一)
1. JavaScript与C/C++混合编程的技术
JavaScript与C++混合编程可以实现两种语言的优势联合,C++的程序性能很高且支持强大的系统调用本事,JavaScript则生态丰富且开发效率高。
JavaScript与C++混合编程常见的技术手段主要有以下几种:
Node.js的C++扩展
: 常用于Node.js实现的后端服务代码。在WebAssembly出现之前,Node.js的服务器代码通常以这种方式调用C/C++的模块。
JsAPI和Native API
: 常应用于包含WebView的客户端。将Native端的代码封装成Web接口(JsAPI)供前端调用,将Web端的代码封装成Native接供词Native调用。像Electron、CEF技术栈的客户端均采用了此种方式。
WebAssembly
: 主要用于欣赏器上运行的前端页面,Node.js从8.0开始也支持WebAssembly,因此也可用于服务端开发。
本章所讲的内容是基于WebAssembly的混合编程技术。
2. 什么是WebAssembly?
WebAssembly
是一种新的编码方式,是一种为web设计的高效、低级字节码格式。我们可以将C/C++、Rust等低级语言编写的代码编译成WebAssembly字节码,现代的Web欣赏器可以加载WebAssembly,并与JavaScript协同运行。从而使得
WebAssembly成为JavaScript与C/C++混合编程并在Web上运行的最有效机制
。C/C++编译成的WebAssembly可以或许以接近原生语言的效率在欣赏器上运行。
2.1. 支持WebAssembly的欣赏器
支持WebAssembly的常用欣赏器及版本:
Chrome 57及以上版本。
Firefox 52及以上版本。
Edge 16(基于Chromium的版本)及以上。
Safari 11及以上版本。
Opera 44及以上版本。
参考信息:
https://caniuse.com/wasm
此外,Node.js从8.0版本也开始支持WebAssembly,WebAssembly目前已经成了W3C的Web标准之一。
2.2. WebAssembly的编译器
除了C/C++外,WebAssembly还支持多种其他计算机语言编译成.wasm,常见的语言和编译器如下:
C/C++
: emscripten编译工具链可以将 C/C++ 编译成 WebAssembly。
Rust
: wasm-pack:工具可以将 Rust 编译成 WebAssembly。
Go
: Go语言的官方工具就链支持将 Go 编译成 WebAssembly。
3. 开发情况搭建
emscripten官方文档:
https://emscripten.org/docs/getting_started/downloads.html
依赖的情况准备
git
Python3.6或更新版本(Windows)
安装步骤
# 1. 从Github上克隆emsdk仓库
# emsdk即Emscripten SDK,是将C/C++编译成WebAssembly的工具
git clone https://github.com/emscripten-core/emsdk.git
# 2. 进入emsdk目录
cd emsdk
# 3. 下载和安装最新的SDK tools(包括node.js、emscripten等)
# Linux/macOS:
./emsdk install latest
# Windows:
./emsdk.bat install latest
# (安装大概需要十几分钟的时间,可以去喝杯茶休息一下了)
# 会将相关的工具安装在以下三个目录
# emsdk/node
# emsdk/upstream
# emsdk/python (Windows才有,会安装nuget)
# 4. 为当前用户设置latest版本为当前激活的工具
# Linux/macOS:
./emsdk activate latest
# Windows:
./emsdk.bat activate latest
# 5. 为当前命令终端设置环境变量
# Linux/macOS:
source ./emsdk_env.sh
# Windows:
./emsdk_env.bat
# 6. 验证是否安装成功
emcc -v
# (如果有显示正常的版本信息,则说明安装成功)
复制代码
以上示例基于3.1.72版本的emscripten。
4. Hello World程序
我们从一个Hello World程序开始,相识WebAssembly程序的开发、编译、运行的大抵流程。
<ol>新建一个测试目次hello_world和源码文件hello.cpp。
[code]// hello_world/hello.cpp#include int main(){ std::cout
欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/)
Powered by Discuz! X3.4