C
2024年12月19日
一、认识
要编译 C/C++
代码为 WebAssembly
文件,最常用的工具是 Emscripten
。Emscripten
是一个将 C/C++
代码编译为 WebAssembly
的工具链。它使用 LLVM
编译器后端来生成 .wasm
文件,并支持 JavaScript
和 HTML
环境中的交互。
二、安装 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++ 源代码
你可以使用任何 C
或 C++
编写代码。以下是一个简单的 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.js
和 prime.wasm
两个文件:
-
prime.js
:一个JavaScript
文件,用于加载和调用.wasm
文件。 -
prime.wasm
:WebAssembly
文件,包含已编译的代码。