- 语言运行时
- 嵌入式
- 物联网
【免费下载链接】wasm-micro-runtime
WebAssembly Micro Runtime (WAMR)
本篇技术指南聚焦 WebAssembly Micro Runtime(WAMR)在 Ubuntu 宿主机上的开发环境搭建,涵盖基础编译依赖、CMake 工具链与 wasi-sdk 16.0 的完整安装步骤。读完本文,你将能够从零准备一台可用于构建 WAMR vmcore(iwasm 可执行文件)并编译、运行 WebAssembly 应用的 Linux 主机,并通过实际构建与 hello world 程序验证环境就绪。
一、环境概览:为什么需要这些组件
在动手安装之前,先厘清 WAMR 宿主机环境的三个核心组成部分及其用途:
- 系统编译工具链:WAMR 的 vmcore 与
iwasm可执行文件由 C 语言编写,需要通过build-essential(gcc/g++/make 等)、CMake 和 Ninja 等工具完成构建; - CMake(较新版本):WAMR 的构建系统基于 CMake 编写,仓库内各平台的
CMakeLists.txt与构建脚本(如 product-mini/platforms/linux/CMakeLists.txt)依赖较新的 CMake 特性,因此需要使用 Kitware 官方 apt 源安装而非 Ubuntu 自带仓库中的旧版本; - wasi-sdk 16.0:这是把 C/C++ 源码编译成 WebAssembly(WASI 目标)的标准工具链。WAMR 的示例程序与测试用例(例如 product-mini/app-samples/hello-world/main.c)都需要借助它生成
.wasm文件,再由 iwasm 加载执行。
按原文档描述,完成上述安装后即可"构建 WAMR 并运行 hello world 程序"。下文按步骤逐步展开,并提供仓库源码层面的佐证与扩展说明。
二、Ubuntu 基础依赖包安装
原文档给出的第一组命令用于安装 WAMR 构建所需的基础软件包:
apt-get update \ && apt-get install -y apt-transport-https apt-utils build-essential \ ca-certificates curl g++-multilib git gnupg \ libgcc-9-dev lib32gcc-9-dev lsb-release \ ninja-build ocaml ocamlbuild python2.7 \ software-properties-common tree tzdata \ unzip valgrind vim wget zip --no-install-recommends逐项拆解这份清单的用途:
build-essential:提供 gcc/g++/make 等核心编译工具,是构建 iwasm 的基础;g++-multilib、libgcc-9-dev、lib32gcc-9-dev:支持 32 位与 64 位混合编译。WAMR 支持X86_64与X86_32等目标架构,多架构头文件与库是交叉编译的必要条件(对应 WAMR 的WAMR_BUILD_TARGET配置项,参见 doc/build_wamr.md 中"Configure platform and architecture"一节);ninja-build:Ninja 构建系统,WAMR 的 CMake 生成器之一,可加快增量编译;cmake(此命令未包含,后续单独安装):见第三节;ocaml/ocamlbuild:部分依赖组件(如 LLVM 相关脚本)在特定环境下需要;valgrind:内存调试工具,doc/build_wamr.md 中专门给出了一组面向 Valgrind 的构建参数组合;wget/curl:下载 wasi-sdk 与 CMake 安装包;git:克隆仓库与获取子模块;- 其余(
apt-transport-https、ca-certificates、gnupg、software-properties-common、lsb-release、tree、tzdata、unzip、zip、vim、apt-utils)为通用系统工具与仓库源管理所需。
版本提示:原文档面向 Ubuntu 18.04(
libgcc-9-dev对应较老的工具链)。仓库的 product-mini/README.md 给出了按系统版本区分的等价命令,更贴近当前环境:
# Ubuntu-22.04 sudo apt install build-essential cmake g++-multilib libgcc-11-dev lib32gcc-11-dev ccache # Ubuntu-20.04 sudo apt install build-essential cmake g++-multilib libgcc-9-dev lib32gcc-9-dev ccache # Ubuntu-18.04 sudo apt install build-essential cmake g++-multilib libgcc-8-dev lib32gcc-8-dev ccache # Fedora sudo dnf install glibc-devel.i686实际使用时,请将libgcc-X-dev/lib32gcc-X-dev替换为与你发行版匹配的版本号(22.04 对应libgcc-11-dev,20.04 对应libgcc-9-dev,18.04 对应libgcc-8-dev)。
三、安装新版 CMake(Kitware 官方 apt 源)
Ubuntu 自带仓库中的 CMake 版本往往偏旧,无法满足 WAMR 构建脚本的要求,因此原文档采用 Kitware 官方源安装。整体思路是:导入 Kitware 的签名密钥 → 添加 apt 软件源 → 通过 apt 安装。
wget --progress=dot:giga -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | tee /usr/share/keyrings/kitware-archive-keyring.gpg > /dev/null \ && echo 'deb [signed-by=/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ bionic main' | tee /etc/apt/sources.list.d/kitware.list >/dev/null \ && apt-get update \ && rm /usr/share/keyrings/kitware-archive-keyring.gpg \ && apt-get install -y kitware-archive-keyring --no-install-recommends \ && apt-get install -y cmake --no-install-recommends命令说明:
- 下载 Kitware 官方 GPG 公钥,
gpg --dearmor转为二进制格式后写入/usr/share/keyrings/kitware-archive-keyring.gpg; - 向
/etc/apt/sources.list.d/kitware.list写入软件源定义(示例基于 Ubuntu bionic 即 18.04;其他版本请将bionic替换为对应代号,如focal/jammy); apt-get update刷新索引后,先安装kitware-archive-keyring包(它会接管密钥管理),再安装cmake。
安装完成后可通过cmake --version验证。WAMR 的构建入口——仓库根目录 CMakeLists.txt 与各平台的product-mini/platforms/*/CMakeLists.txt——都会在配置阶段检查 CMake 版本,版本过旧会在cmake ..时直接报错,这也是必须使用较新 CMake 的直接原因。
四、安装 wasi-sdk 16.0(WASI 编译工具链)
WASI SDK 是"把 C 代码编译成 WASI 兼容的 wasm 模块"的标准工具链。原文档将其安装到/opt下,并通过软链接固定访问路径:
wget -c --progress=dot:giga https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-16/wasi-sdk-16.0-linux.tar.gz -P /opt \ && tar xf /opt/wasi-sdk-16.0-linux.tar.gz -C /opt \ && ln -fs /opt/wasi-sdk-16.0 /opt/wasi-sdk \ && rm /opt/wasi-sdk-16.0-linux.tar.gz命令要点:
wget -c支持断点续传,-P /opt指定下载目录;- 解压后得到
/opt/wasi-sdk-16.0/目录,其中包含bin/clang、bin/wasm-ld、bin/llvm-ar等工具; ln -fs /opt/wasi-sdk-16.0 /opt/wasi-sdk建立软链接,把/opt/wasi-sdk固定为工具链访问入口,便于后续升级 SDK 版本时无需改动构建配置。
为什么路径固定在/opt/wasi-sdk?
因为 WAMR 的 CMake 工具链文件默认就从这个路径查找工具链。查看 wamr-sdk/app/wasi_toolchain.cmake:
if (NOT DEFINED WASI_SDK_DIR) SET (WASI_SDK_DIR "/opt/wasi-sdk") endif () SET (CMAKE_C_COMPILER "${WASI_SDK_DIR}/bin/clang") SET (CMAKE_CXX_COMPILER "${WASI_SDK_DIR}/bin/clang++") SET (CMAKE_LINKER "${WASI_SDK_DIR}/bin/wasm-ld" CACHE INTERNAL "") SET (CMAKE_AR "${WASI_SDK_DIR}/bin/llvm-ar" CACHE INTERNAL "") SET (CMAKE_NM "${WASI_SDK_DIR}/bin/llvm-nm" CACHE INTERNAL "") SET (CMAKE_OBJDUMP "${WASI_SDK_DIR}/bin/llvm-dwarfdump" CACHE INTERNAL "") SET (CMAKE_RANLIB "${WASI_SDK_DIR}/bin/llvm-ranlib" CACHE INTERNAL "")即:当环境变量WASI_SDK_DIR未定义时,默认值为/opt/wasi-sdk。这正是原文档建立软链接的原因——编译 wasm 应用时(例如通过wamr-sdk/app/wamr_toolchain.cmake或wasi_toolchain.cmake指定工具链),CMake 会自动使用/opt/wasi-sdk/bin/clang等工具完成编译。若你的 SDK 安装在其他位置,需显式设置WASI_SDK_DIR环境变量(该变量同样被 wamr-sdk/app/wamr_toolchain.cmake 校验,未定义时会以WASI_SDK_DIR is not defined报错)。
五、验证环境就绪
安装完成后,建议按以下顺序做一次快速自检:
# 1. 编译器与构建工具 gcc --version cmake --version ninja --version # 2. wasi-sdk 工具链 ls -l /opt/wasi-sdk /opt/wasi-sdk/bin/clang --version # 3. 确认软链接有效 readlink -f /opt/wasi-sdk若上述命令均正常输出,即可进入下一节完成 WAMR 的构建与 hello world 验证。
六、构建 iwasm 并运行 hello world(环境验证闭环)
环境准备是否真正可用,最直接的检验方式是完成一次完整的"构建 + 运行"闭环。WAMR 仓库 gitbook/basics/getting-started/on_host.md 给出了与本节前置文档配套的完整流程。
6.1 构建 iwasm vmcore
cd ${WAMR-dir}/product-mini/platforms/${your platform} mkdir build && cd build cmake .. make以 Linux 为例(Ubuntu 对应linux平台目录 product-mini/platforms/linux):
cd product-mini/platforms/linux/ mkdir build && cd build cmake .. make # iwasm 生成于当前目录依据 product-mini/README.md,Linux 平台默认启用fast interpreter、AOT与Libc WASI,JIT 默认关闭,构建目标自动按主机位宽设为X86_64或X86_32。默认配置足以运行解释器模式下的 wasm 文件;如需调整运行模式(classic interpreter、AOT、LLVM JIT、Fast JIT、Multi-tier JIT),可参考 doc/build_wamr.md 中的WAMR_BUILD_*配置项组合,例如:
# 仅解释器(经典模式) cmake .. -DWAMR_BUILD_INTERP=1 -DWAMR_BUILD_FAST_INTERP=0 # 关闭解释器、启用 AOT 与 WASI cmake .. -DWAMR_BUILD_INTERP=0 -DWAMR_BUILD_AOT=1 -DWAMR_BUILD_LIBC_WASI=1 -DWAMR_BUILD_PLATFORM=linux6.2 编译并运行 hello world 程序
cp iwasm ../../../app-samples/hello-world cd ${WAMR-dir}/product-mini/app-samples/hello-world ./build.sh其中./build.sh内部即通过上节安装的 wasi-sdk(/opt/wasi-sdk)把 C 源码编译为test.wasm。示例程序源码位于 product-mini/app-samples/hello-world/main.c,其逻辑为打印Hello world!、malloc 一段堆内存并写入字符串后释放——覆盖了 WASI 环境下标准输出与堆内存两大核心能力。
最后执行第一个 wasm 程序:
./iwasm test.wasm正常输出如下:
Hello world! buf ptr: 0x... buf: 1234看到Hello world!即说明宿主机环境、WAMR 构建链路与 wasi-sdk 工具链全部就绪。
6.3 备选:Docker 方式
若不想逐项安装依赖,仓库还提供了 Docker 一键构建方案(详见 gitbook/basics/getting-started/on_docker.md 与 product-mini/README.md 的 Docker 一节):
cd ci ./build_wamr.sh ls ../build_out/Docker 方式会自动下载全部依赖并构建 WAMR Core,生成libiwasm.so、libvmlib.a与iwasm可执行文件并拷贝至build_out,适合希望规避平台相关依赖与兼容性问题的场景。
七、其他平台环境准备说明(MacOS / Windows)
原文档在 Ubuntu 之后以 TODO 形式预留了 MacOS 与 Windows 章节。结合仓库 product-mini/README.md,这两个平台的依赖要点如下(可作为环境准备参考):
- MacOS:需先从 App Store 安装 Xcode,再安装 CMake(Homebrew:
brew install cmake),构建目录为product-mini/platforms/darwin; - Windows:需确保 MSVC 与 CMake 已加入命令行环境,构建目录为
product-mini/platforms/windows,产物为Release/iwasm.exe。
注意:上述仅为依赖级说明,Windows 上
WAMR_BUILD_LIBC_WASI不受支持,可改用实验性的WAMR_BUILD_LIBC_UVWASI(详见 doc/build_wamr.md 的 "Configure LIBC" 一节)。
八、常见问题与排查提示
cmake ..报版本过低:说明仍在使用系统旧版 CMake,请确认 Kitware 源已正确添加并重新安装(第三节);- wasm 应用编译时报
WASI_SDK_DIR is not defined:编译 wasm 应用时(走wamr-sdk/app/wamr_toolchain.cmake路径)必须显式导出WASI_SDK_DIR,例如export WASI_SDK_DIR=/opt/wasi-sdk; libgcc-9-dev安装失败:说明发行版版本与命令中的包版本不匹配,请按第二节的版本对照表选用对应版本号;- valgrind 检查:若需用 Valgrind 调试内存问题,doc/build_wamr.md 建议额外加上
-DCMAKE_BUILD_TYPE=Debug -DWAMR_DISABLE_HW_BOUND_CHECK=0 -DWAMR_DISABLE_WRITE_GS_BASE=0配置。
参考文档
- 宿主机构建与 hello world 全流程:gitbook/basics/getting-started/on_host.md、gitbook/basics/getting-started/on_docker.md
- 各平台构建说明与依赖清单:product-mini/README.md
- WAMR vmcore 全部 CMake 编译选项:doc/build_wamr.md
- wasi-sdk 工具链默认路径定义:wamr-sdk/app/wasi_toolchain.cmake、wamr-sdk/app/wamr_toolchain.cmake
- hello world 示例源码:product-mini/app-samples/hello-world/main.c
- 语言运行时
- 嵌入式
- 物联网
【免费下载链接】wasm-micro-runtime
WebAssembly Micro Runtime (WAMR)
相关推荐
PeerTube 部署依赖安装全指南:各主流发行版环境准备与版本自检机制解析
PeerTube 部署依赖安装全指南:各主流发行版环境准备与版本自检机制解析 PeerTube 是一套基于 Node.js/Express、PostgreSQL
音视频视频后端前端从源码构建 NodeOS:环境准备、依赖安装与 QEMU 启动全流程指南
从源码构建 NodeOS:环境准备、依赖安装与 QEMU 启动全流程指南 NodeOS 是一个以 Node.js 作为用户态的轻量级操作系统,本文基于仓库内 d
操作系统嵌入式GPT Academic 本地安装与启动全流程:环境准备、依赖安装与源码级验证
GPT Academic 本地安装与启动全流程:环境准备、依赖安装与源码级验证 本篇指南以 GPT Academic(LLM 大语言模型的实用化交互界面)的官方
人工智能大模型AI 应用交互助手
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考