Emscripten 和 Clang 在 WebAssembly 编译方面有什么区别

What is the difference between Emscripten and Clang in terms of WebAssembly compilation

我知道 clang(通过使用 target=wasm32)和 emscripten 都可以将 C 代码编译成 webassembly,但它们有何不同?

看起来他们都使用 LLVM 作为后端。其实我也不太明白llvm和clang的关系...

我已经阅读了一段时间的WebAssembly,但对它缺乏底层的了解。非常感谢您的宝贵时间!!

clang 是基于 llvm 技术构建的编译器,因此您经常听到 clang 和 llvm 可以互换使用。 clang 只是 llvm 项目的一个组成部分。

emscripten 是一个编译器,它使用 clang 来完成实际编译为 WebAssembly 的大部分繁重工作,但还在其之上添加了许多特性和功能,主要与 JavaScript 和POSIX 和其他标准的网络和仿真。

emscripten 运行s 在内部使用 --target=wasm32-unknown-emscripten,与常规的 --target=wasm32.

有一些非常小的差异

如果您 运行 使用 -v emscripten,它将打印出其在幕后使用的完整 clang 命令行。