RedisTimeSeries的Yocto配方编写及编译错误排查求助
RedisTimeSeries的Yocto配方编写及编译错误排查求助
看起来你在给RedisTimeSeries编写Yocto配方时遇到了几个典型的交叉编译和依赖配置问题,我来帮你一步步拆解解决:
先梳理你遇到的核心错误原因:
whoami: command not found:Yocto的默认编译环境不包含这个工具,它属于shadow工具集的一部分,需要添加对应native包到编译依赖。openssl/ssl.h: No such file or directory:编译系统找不到OpenSSL的头文件,说明依赖配置没让编译流程正确识别OpenSSL的开发文件,同时RedisTimeSeries的Makefile默认走了x86_64编译路径,没适配你的ARM交叉编译环境。- Python依赖问题:你不想让Python出现在目标镜像里,但当前的依赖写法混淆了编译时依赖和运行时依赖,需要调整。
修改后的配方及详细说明:
SUMMARY = "Time Series data structure for Redis" DESCRIPTION = "RedisTimeSeries is a time-series database (TSDB) module for Redis, by Redis." HOMEPAGE = "https://github.com/RedisTimeSeries/RedisTimeSeries" LICENSE = "CLOSED" SRC_URI = "gitsm://github.com/RedisTimeSeries/RedisTimeSeries;branch=1.8;rev=v1.8.10" S = "${WORKDIR}/git" # 编译时依赖:native包仅在构建主机使用,不会进入目标镜像 DEPENDS += "python3-native openssl-dev shadow-native" # 运行时仅依赖Redis,满足你不想带Python的需求 RDEPENDS:${PN} = "redis" do_compile() { # 传递交叉编译工具链参数,强制适配ARM架构,避免默认编译x64版本 oe_runmake CC="${CC}" AR="${AR}" LD="${LD}" \ CFLAGS="${CFLAGS} -I${STAGING_INCDIR}/openssl" \ LDFLAGS="${LDFLAGS} -L${STAGING_LIBDIR}" } # 手动指定模块安装路径,确保Redis能加载到 do_install() { install -d ${D}${libdir}/redis/modules install -m 0644 ${S}/bin/linux-*-release/redistimeseries.so ${D}${libdir}/redis/modules/ } # 确保模块文件被正确打包 FILES:${PN} += "${libdir}/redis/modules/redistimeseries.so"
关键修改点解释:
- 依赖调整:
- 用
python3-native替代普通python3:native包仅在编译阶段生效,不会被打包到目标镜像,完美解决你不想带Python的诉求。 - 添加
openssl-dev:提供OpenSSL的头文件和开发库,直接解决头文件找不到的问题。 - 添加
shadow-native:补充whoami工具,解决命令缺失的错误。
- 用
- 交叉编译适配:
- 用
oe_runmake替代直接make,它会自动兼容Yocto的环境变量,同时手动指定CC/AR/LD等交叉编译工具,纠正Makefile默认编译x86_64版本的问题(从你的日志里linux-x64-release能看出默认架构不对)。 - 通过
CFLAGS和LDFLAGS明确指定OpenSSL的头文件和库路径,确保编译系统能准确定位到依赖文件。
- 用
- 安装逻辑补充:默认Makefile不会自动把模块安装到Redis的标准路径,手动添加
do_install和FILES配置,保证模块能被Redis识别并打包进最终镜像。
备注:内容来源于stack exchange,提问作者Toon Van Eyck
相关产品推荐
相关产品推荐

