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

Yocto Project下gRPC调用openssl-native版本集成配置问题

Yocto集成gRPC与OpenSSL 3.0.8构建问题解决方案

核心问题分析

从报错信息来看,CMake在目标架构的recipe-sysroot中找到了版本为1.1.1w的OpenSSL,不符合你要求的3.0.8版本。问题根源在于CMake的搜索路径未正确指向所需的OpenSSL包(目标架构包/主机native包),需根据你的实际需求调整配置。


解决方案步骤

1. 明确OpenSSL的使用场景

  • 如果你的应用运行在目标板上需要OpenSSL 3.0.8:需确保Yocto构建的目标系统包含对应版本的OpenSSL(而非依赖主机端的openssl-native)。
  • 如果是构建过程中的工具/代码生成环节(如gRPC的proto编译)需要主机架构的OpenSSL 3.0.8:需配置CMake优先查找Yocto提供的openssl-native包。

2. 针对目标应用依赖OpenSSL 3.0.8的配置

修改Yocto配方(.bb文件)

# 添加目标OpenSSL依赖
DEPENDS += "openssl"
# 指定OpenSSL版本(需确保你的Yocto layer中有对应版本的配方,如meta-openembedded或自定义配方)
PREFERRED_VERSION_openssl = "3.0.8"

# 强制CMake使用目标sysroot中的OpenSSL路径
EXTRA_OECMAKE += "\
    -DOPENSSL_ROOT_DIR=${STAGING_DIR_TARGET}/usr \
    -DOPENSSL_INCLUDE_DIR=${STAGING_INCDIR} \
    -DOPENSSL_LIBRARIES=${STAGING_LIBDIR} \
"

3. 针对构建工具依赖openssl-native的配置

修改Yocto配方(.bb文件)

# 添加主机端native包依赖
DEPENDS += "openssl-native grpc-native"

# 配置CMake优先查找主机native包路径
EXTRA_OECMAKE += "\
    -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=BOTH \
    -DOPENSSL_ROOT_DIR=${STAGING_DIR_NATIVE}/usr \
    -DOPENSSL_INCLUDE_DIR=${STAGING_INCDIR_NATIVE} \
    -DOPENSSL_LIBRARIES=${STAGING_LIBDIR_NATIVE} \
    -DPKG_CONFIG_PATH=${STAGING_DIR_NATIVE}/usr/lib/pkgconfig \
"

说明:CMAKE_FIND_ROOT_PATH_MODE_PACKAGE=BOTH允许CMake同时搜索主机和目标路径,后续参数强制指定native包的位置,避免CMake误找到目标sysroot中的旧版本。


4. 优化CMakeLists.txt(可选)

避免硬编码版本号,让版本需求可通过Yocto配方传递:

# 从外部参数获取版本要求,增强灵活性
find_package(OpenSSL ${OPENSSL_REQUIRED_VERSION} REQUIRED)
find_package(ZLIB 1.2.13 REQUIRED)
find_package(gRPC 1.50.0 REQUIRED)
add_subdirectory(proto)

在配方中可添加:

EXTRA_OECMAKE += "-DOPENSSL_REQUIRED_VERSION=3.0.8"

5. 清理缓存重新构建

bitbake project-appls -c cleanall
bitbake project-appls

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 10:01:34