跳到主要内容

C++

2024年12月19日
柏拉文
越努力,越幸运

一、认识


要编译 C/C++ 代码为 WebAssembly 文件,最常用的工具是 EmscriptenEmscripten 是一个将 C/C++ 代码编译为 WebAssembly 的工具链。它使用 LLVM 编译器后端来生成 .wasm 文件,并支持 JavaScriptHTML 环境中的交互。

二、安装 Emscripten


2.1 安装 Emscripten SDK

# 克隆 Emscripten SDK 仓库
git clone https://github.com/emscripten-core/emsdk.git
cd emsdk

# 获取最新的版本并安装
./emsdk install latest
./emsdk activate latest

# 配置环境变量
source ./emsdk_env.sh

2.2 安装成功验证

在安装完成并设置环境变量后,使用 emcc -v 命令验证 Emscripten 是否安装成功。

emcc -v

三、编写 C/C++ 源代码


你可以使用任何 CC++ 编写代码。以下是一个简单的 C 语言程序,计算素数个数。

#include <stdio.h>
#include <stdbool.h>

bool is_prime(int num) {
if (num <= 1) return false;
for (int i = 2; i * i <= num; i++) {
if (num % i == 0) return false;
}
return true;
}

int count_primes(int start, int end) {
int count = 0;
for (int i = start; i <= end; i++) {
if (is_prime(i)) {
count++;
}
}
return count;
}

int main() {
printf("Prime count in range [1, 100]: %d\n", count_primes(1, 100));
return 0;
}

四、编译为 WebAssembly (.wasm)


emcc prime.c -o prime.js -s WASM=1 -s EXPORTED_FUNCTIONS="['_count_primes']" -O3
  • -o prime.js:指定输出的 JavaScript 文件。

  • -s WASM=1:启用 WebAssembly 输出。

  • -s EXPORTED_FUNCTIONS="['_count_primes']":指定暴露的函数。

  • -O3:优化级别,通常选择 -O3 来进行最大化优化。

这条命令将生成 prime.jsprime.wasm 两个文件:

  • prime.js:一个 JavaScript 文件,用于加载和调用 .wasm 文件。

  • prime.wasmWebAssembly 文件,包含已编译的代码。