Wasm-micro-runtime 项目中 bh_read_file.h 头文件的使用指南
2025-06-07 21:31:59作者:庞队千Virginia
背景介绍
在开发基于 Wasm-micro-runtime (WAMR) 的项目时,开发者经常会遇到需要加载 WASM 二进制文件的需求。WAMR 提供了一个实用的工具函数 bh_read_file_to_buffer,它位于 bh_read_file.h 头文件中,用于将 WASM 文件读取到内存缓冲区中。
常见问题分析
许多开发者在尝试使用这个功能时会遇到两个主要问题:
- 头文件找不到:编译器提示无法找到
bh_read_file.h头文件 - 链接错误:即使手动指定了头文件路径,也会出现未定义引用的链接错误
这些问题源于 WAMR 的特殊项目结构设计,bh_read_file.h 被归类为"不常见"工具,需要额外的 CMake 配置才能正确使用。
解决方案
1. 包含正确的 CMake 文件
除了常规的 WAMR 运行时库配置外,还需要包含专门管理不常见工具的 CMake 文件:
include (wasm-micro-runtime-main/build-scripts/runtime_lib.cmake)
include (${SHARED_DIR}/utils/uncommon/shared_uncommon.cmake)
add_library(vmlib ${WAMR_RUNTIME_LIB_SOURCE} ${UNCOMMON_SHARED_SOURCE})
target_link_libraries(my_target PRIVATE vmlib)
2. 替代方案:使用 add_subdirectory
另一种更简单的方法是使用 CMake 的 add_subdirectory 命令,这将自动处理 WAMR 的所有内部依赖关系:
add_subdirectory(wasm-micro-runtime-main)
技术原理
WAMR 将一些不常用的工具函数单独归类,主要是为了:
- 模块化设计:保持核心运行时库的精简
- 按需加载:减少不必要的代码体积
- 灵活配置:允许开发者只选择需要的功能组件
bh_read_file.h 属于这种"不常见"工具类别,因此需要额外的配置步骤才能使用。
最佳实践建议
- 参考官方示例:WAMR 的 Linux 平台实现提供了完整的使用示例
- 统一构建方式:建议选择一种构建方式(直接包含或 add_subdirectory)并保持一致
- 文档查阅:遇到问题时,优先查阅 WAMR 的嵌入式集成文档
总结
正确使用 WAMR 的文件读取功能需要理解其模块化设计理念。通过适当的 CMake 配置,开发者可以轻松集成 bh_read_file_to_buffer 等实用功能到自己的项目中。对于初次接触 WAMR 的开发者,建议从简单的 add_subdirectory 方式开始,随着对项目结构的熟悉,再考虑更细粒度的控制方式。
登录后查看全文
热门项目推荐
相关项目推荐
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0215
cann-learning-hubCANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。Jupyter Notebook0138
uni-appA cross-platform framework using Vue.jsJavaScript08
GLM-5.2智谱开源 GLM-5.2,这是针对长文本任务的最新旗舰模型。相较于前代产品 GLM-5.1,它在长文本任务处理能力上实现了显著飞跃,并且首次在稳定的 100 万 token 上下文中提供这一能力。Jinja00
SwanLab⚡️SwanLab - an open-source, modern-design AI training tracking and visualization tool. Supports Cloud / Self-hosted use. Integrated with PyTorch / Transformers / LLaMA Factory / veRL/ Swift / Ultralytics / MMEngine / Keras etc.Python00
tiny-universe《大模型白盒子构建指南》:一个全手搓的Tiny-UniverseJupyter Notebook03
项目优选
收起
deepin linux kernel
C
32
16
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
470
465
暂无描述
Dockerfile
778
5.08 K
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
876
2.03 K
Ascend Extension for PyTorch
Python
758
968
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
697
1.4 K
昇腾LLM分布式训练框架
Python
185
231
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.1 K
1.14 K
本仓库是 Flutter SDK 与 Flutter Engine 的 OpenHarmony 适配版本,由 CPF-Flutter 团队维护。开发者可使用熟悉的 Flutter 技术栈开发 OpenHarmony 应用,3.35.7 及以后的适配版本可基于本仓库源码构建支持 OpenHarmony 的 Flutter Engine。
Dart
1.04 K
271
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
2.25 K
677