❶ webassembly如何编译所依赖的无源码的c/c++第三方库
Emscripten 是一个用于将C/C++代码编译为WebAssembly (Wasm)字节码的工具链。它还能将 TypeScript (TSC) 代码编译为 LLVM 字节码。
emsdk 是一个基于 Python 的全平台开发工具,用于管理和使用 Emscripten 编译器。它提供了一系列功能,包括安装、卸载 Emscripten 及其相关工具链、切换不同的编译器版本、管理运行时模块(即 .s 和 .js 文件)以及支持 WebAssembly 的生成和优化。
Emscripten 的编译优化过程分为两个步骤。首先,代码会被转换为中间表示形式,然后进行一系列优化,最后生成最终的 Wasm 字节码。
在开始使用 Emscripten 之前,需要先安装 Python 3.6+ 和 git。安装指南可以在 Python 官网和 git 官网上找到。
接下来,下载并激活 emsdk。完成后,配置环境变量,通常在 /etc/profile 文件中进行配置。
安装完成 Emscripten 后,可以在全局调用命令来编译 C 或 TypeScript (TS) 代码为 wasm 文件。
可以使用更新 emsdk、激活其他版本等命令来管理 Emscripten 的版本。
在配置 Visual Studio Code(VSCode)时,可以按照以下步骤进行配置。此外,需要准备一个名为 hello.cpp 的文件,并使用以下命令将其编译为 JavaScript:emcc hello.cpp -o hello.js -s -O3 -s wasm=1。这里,-O3 是优化等级,可以生成只有几十字节的 wasm 文件。如果没有指定 -o hello.js,则会生成默认的 a.out.js 和 a.out.wasm 文件。
使用 Node.js 测试生成的 JavaScript 文件,控制台会输出 "hello, world"。
要测试 wasm 文件,可以生成 HTML 文件,并在浏览器中打开它,以查看效果。将 wasm 文件转换为 wast 可读文件后,可以使用 emcc 命令先将其编译为 JavaScript,然后指定导出方法。
在准备了一个名为 index.cpp 的文件后,使用以下命令执行:emcc index.cpp -o index.js -s -O3 -s wasm=1。这里的参数说明是:EXPORTED_FUNCTIONS 指定了导出的函数名称,需要与源文件中的函数名称相对应(在函数名前加上 "_")。编写一个用于测试的 JavaScript 文件(test.js),并使用 Node.js 进行测试。