☰
WAMR 宿主机环境准备指南:Ubuntu 依赖、CMake 与 wasi-sdk 16.0 安装全流程
2026/10/10 1:19:38 网站建设 项目流程
  • 语言运行时
  • 嵌入式
  • 物联网

【免费下载链接】wasm-micro-runtime

WebAssembly Micro Runtime (WAMR)

项目地址:https://gitcode.com/gh_mirrors/wa/wasm-micro-runtime
点击查看免费下载

本篇技术指南聚焦 WebAssembly Micro Runtime(WAMR)在 Ubuntu 宿主机上的开发环境搭建,涵盖基础编译依赖、CMake 工具链与 wasi-sdk 16.0 的完整安装步骤。读完本文,你将能够从零准备一台可用于构建 WAMR vmcore(iwasm 可执行文件)并编译、运行 WebAssembly 应用的 Linux 主机,并通过实际构建与 hello world 程序验证环境就绪。

一、环境概览:为什么需要这些组件

在动手安装之前,先厘清 WAMR 宿主机环境的三个核心组成部分及其用途:

  1. 系统编译工具链:WAMR 的 vmcore 与iwasm可执行文件由 C 语言编写,需要通过build-essential(gcc/g++/make 等)、CMake 和 Ninja 等工具完成构建;
  2. CMake(较新版本):WAMR 的构建系统基于 CMake 编写,仓库内各平台的CMakeLists.txt与构建脚本(如 product-mini/platforms/linux/CMakeLists.txt)依赖较新的 CMake 特性,因此需要使用 Kitware 官方 apt 源安装而非 Ubuntu 自带仓库中的旧版本;
  3. 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

命令说明:

  1. 下载 Kitware 官方 GPG 公钥,gpg --dearmor转为二进制格式后写入/usr/share/keyrings/kitware-archive-keyring.gpg;
  2. 向/etc/apt/sources.list.d/kitware.list写入软件源定义(示例基于 Ubuntu bionic 即 18.04;其他版本请将bionic替换为对应代号,如focal/jammy);
  3. 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=linux

6.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" 一节)。

八、常见问题与排查提示

  1. cmake ..报版本过低:说明仍在使用系统旧版 CMake,请确认 Kitware 源已正确添加并重新安装(第三节);
  2. wasm 应用编译时报WASI_SDK_DIR is not defined:编译 wasm 应用时(走wamr-sdk/app/wamr_toolchain.cmake路径)必须显式导出WASI_SDK_DIR,例如export WASI_SDK_DIR=/opt/wasi-sdk;
  3. libgcc-9-dev安装失败:说明发行版版本与命令中的包版本不匹配,请按第二节的版本对照表选用对应版本号;
  4. 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)

项目地址:https://gitcode.com/gh_mirrors/wa/wasm-micro-runtime
点击查看免费下载

相关推荐

上一篇:Refly v0.2.2 版本深度解析:Plus 订阅计划、国际化文档站与核心稳定性修复
下一篇:Hyperf 注解完全指南:从基础概念到自定义注解与 ClassMap 类映射

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询