寇油
2025-6-1 18:53:16
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 |
|
|
|
相关推荐
|
|