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

Yocto构建含Modbus库的C程序报错:modbus.h文件不存在

解决Yocto中依赖libmodbus的C程序编译找不到头文件问题

问题根源

编译时出现modbus.h: No such file or directory错误,核心原因有两点:

  1. 编译阶段未正确引入包含头文件的libmodbus开发包
  2. 手动指定的头文件路径错误(${D}是安装目录,编译阶段该路径下还不存在头文件)

分步修正Recipe

1. 修正依赖声明

  • 编译依赖需指定libmodbus-dev(而非仅libmodbus),因为libmodbus仅提供运行时共享库,libmodbus-dev包含编译所需的头文件、链接配置
  • 添加运行时依赖,确保目标板运行程序时能找到libmodbus库

2. 简化编译命令

Yocto会自动将DEPENDS中库的头文件路径加入${CFLAGS},链接路径加入${LDFLAGS},无需手动指定-I路径。修改do_compile函数,利用Yocto自动生成的编译变量即可。

3. 清理冗余配置

移除不必要的FILES_${PN} += "${libdir}/*.so"、FILES_SOLIBSDEV、INSANE_SKIP_${PN}等配置,避免打包无关文件或触发不必要的检查。

修正后的完整Recipe

SUMMARY = "modbustest Recipe"
LICENSE = "CLOSED"

SRC_URI = "file://test.c"

# 编译依赖:获取头文件和编译链接信息
DEPENDS += "libmodbus-dev"
# 运行时依赖:确保目标板有运行所需的libmodbus库
RDEPENDS_${PN} += "libmodbus"

S = "${WORKDIR}"

do_compile() {
    ${CC} ${CFLAGS} ${LDFLAGS} test.c -o test -lmodbus
}

do_install() {
    install -d ${D}/opt/modbustest/bin
    install -m 0755 test ${D}/opt/modbustest/bin
}

# 指定程序的安装路径
FILES_${PN} += "/opt/modbustest/bin/test"

最终验证说明

最终通过在目标板安装libmodbus-dev替代原有的libmodbus,并结合上述Recipe修改,成功完成编译。需注意:

  • libmodbus:仅包含运行时共享库,用于程序运行阶段
  • libmodbus-dev:包含编译所需的头文件、静态库及pkg-config配置,是编译依赖libmodbus的程序必须的包

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 15:45:37