背景
最近研究AV1编码标准的aom编码器,编译的过程中发现需要依赖EMSDK,看解释EMSDK就是Emscripten 的相应SDK,所以此博客记录下EMSDK的安装过程;因为之前完全没接触过Emscripten 。
Emscripten
Emscripten 是一个用于将 C 和 C++ 代码编译成 WebAssembly (Wasm) 和 asm.js 的工具链。它基于 LLVM 编译器基础设施构建,允许开发者在网页中以接近原生的速度运行 C 和 C++ 程序,而无需任何插件。
以下是关于 Emscripten 的一些关键点:
-
编译目标:Emscripten 可以将 C/C++ 代码编译为 WebAssembly 字节码,这是一种高效的、在 Web 浏览器中运行的低级虚拟机代码。
-
安装与配置:安装 Emscripten 需要先安装一些前置条件,如 Git、CMake、系统编译工具和 Python。然后通过 emsdk(Emscripten SDK)来安装和管理 Emscripten。
-
编译过程:Emscripten 使用 emcc(Emscripten Compiler Frontend)作为命令行工具来编译代码。它支持多种编译优化选项,如 -O1 和 -O2,用于生成不同程度的优化代码。
-
文件系统模拟:由于浏览器的沙盒环境限制,Emscripten 模拟了一个文件系统,允许 C/C++ 代码中使用标准的文件操作 API。
-
HTML 生成:Emscripten 不仅可以生成 JavaScript 文件,还可以生成 HTML 文件,使得编译后的代码能够直接在浏览器中运行。
-
测试集:Emscripten 提供了丰富的测试用例,覆盖了其大部分功能,对开发者来说是很好的学习资源。
-
用途:Emscripten 特别适用于希望在 Web 浏览器中运行 3D 游戏和其他高性能应用的场景。
-
入门教程:对于初学者,有一系列教程可以帮助快速入门 Emscripten,包括如何编译简单的 “Hello, World” 程序,以及如何使用 Emscripten 的各种特性和优化。
Emscripten 的使用对于希望将 C/C++ 应用带入 Web 平台的开发者来说是一个强大的工具,它通过 WebAssembly 使得在浏览器中运行接近原生性能的应用程序成为可能。
- 官网:https://emscripten.org/
Emscripten 的安装过程
- 源码下载:
git clone https://github.com/emscripten-core/emsdk
- cd到源码目录:
cd emsdk
D:\_codec\emsdk [main ≡]> ls
目录: D:\_codec\emsdk
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2024/5/12 9:21 .circleci
d----- 2024/5/12 9:21 .github
d----- 2024/5/12 9:21 bazel
d----- 2024/5/12 9:21 docker
d----- 2024/5/12 9:25 downloads
d----- 2024/5/12 9:24 java
d----- 2024/5/12 9:24 node
d----- 2024/5/12 9:24 python
d----- 2024/5/12 9:21 scripts
d----- 2024/5/12 9:21 test
d----- 2024/5/12 9:25 upstream
-a---- 2024/5/12 9:21 453 .dockerignore
-a---- 2024/5/12 9:25 398 .emscripten
-a---- 2024/5/12 9:21 513 .flake8
-a---- 2024/5/12 9:21 510 .gitignore
-a---- 2024/5/12 9:21 26 emcmdprompt.bat
-a---- 2024/5/12 9:21 13068 emscripten-releases-tags.json
-a---- 2024/5/12 9:21 1688 emsdk
-a---- 2024/5/12 9:21 1564 emsdk.bat
-a---- 2024/5/12 9:21 1436 emsdk.ps1
-a---- 2024/5/12 9:21 120426 emsdk.py
-a---- 2024/5/12 9:21 34 emsdk_env.bat
-a---- 2024/5/12 9:21 596 emsdk_env.csh
-a---- 2024/5/12 9:21 316 emsdk_env.fish
-a---- 2024/5/12 9:21 100 emsdk_env.ps1
-a---- 2024/5/12 9:21 2050 emsdk_env.sh
-a---- 2024/5/12 9:21 25072 emsdk_manifest.json
-a---- 2024/5/12 9:21 744 legacy-binaryen-tags.txt
-a---- 2024/5/12 9:21 1348 legacy-emscripten-tags.txt
-a---- 2024/5/12 9:21 1353 LICENSE
-a---- 2024/5/12 9:21 2455 llvm-tags-64bit.txt
-a---- 2024/5/12 9:21 11733 README.md
-a---- 2024/5/12 9:21 734 SECURITY.md
- 顺序输入如下命令,进行激活、设置到环境变量中。
.\emsdk update #更新
git pull
.\emsdk install --global latest # 安装
.\emsdk activate latest # 激活
.\emsdk_env.bat # 设置到环境变量中
- 验证,终端输入如下命令:
emcc -v
,出现如下信息,表示安装成功
D:\_codec\emsdk [main ≡]> emcc -v
emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 3.1.59 (0e4c5994eb5b8defd38367a416d0703fd506ad81)
clang version 19.0.0git (https:/github.com/llvm/llvm-project df762a1643bb5b0b3c907611d118c82d4b68a39d)
Target: wasm32-unknown-emscripten
Thread model: posix
InstalledDir: D:\_codec\emsdk\upstream\bin