You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用共享内存编译标志链接wasi-libc并解决wasm-ld报错

WASM共享内存链接报错解决方案

你的报错根源是当前使用的预编译wasi-libc库内的目标文件(如报错提及的errno.o)编译时未开启atomics、bulk-memory特性,这类编译时的特性标记是硬编码在目标文件中的,仅向链接器传递参数无法修改已编译文件的标记,必须使用对应参数重新编译wasi-libc才能解决问题,无需尝试修改链接参数绕过该检查。

具体操作步骤如下:

  • 拉取wasi-libc官方源码
  • 编译wasi-libc时给C/C++编译器添加上特性参数,示例编译命令:
    make CC=clang \
      CFLAGS="-matomics -mbulk-memory" \
      CXXFLAGS="-matomics -mbulk-memory" \
      install
    
    如果你需要配套pthread支持,可在参数中额外添加-pthread,同时指定TARGET=wasm32-wasi-threads编译对应目标版本的libc。
  • 替换项目中使用的wasi-libc库文件为新编译的版本,调整链接路径确保优先加载你编译的带特性标记的库。
  • 确认自有代码的编译、链接参数正确:
    • 所有自有代码编译时保留-matomics -mbulk-memory参数
    • 链接阶段向wasm-ld传递--shared-memory参数,若通过clang/clang++驱动链接,参数写法为-Wl,--shared-memory

如果你使用的是较新版本的wasi-sdk,可直接在编译自有代码时指定目标为wasm32-wasi-threads,工具链会自动调用预编译的带原子、共享内存支持的wasi-libc版本,无需手动编译源码。

内容的提问来源于stack exchange,提问作者Denis Belov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 04:06:04