❶ 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 進行測試。