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

Yocto Scarthgap构建SDK时mbedtls静态库CMake路径错误排查

Yocto Scarthgap SDK 集成 mbedtls 静态库问题排查与解决

问题核心

添加TOOLCHAIN_TARGET_TASK += " mbedtls-staticdev mbedtls-dev"后,CMake配置文件里的库路径被硬编码为/usr/lib/libeverest.a,而非SDK sysroot下的相对路径${_IMPORT_PREFIX}/lib/libeverest.a,导致交叉编译时CMake在主机(WSL)系统路径查找库文件,引发缺失错误。同时需要仅将静态库纳入SDK,不安装到目标板。

原因分析

mbedtls recipe的CMake安装配置在生成MbedTLSTargets.cmake时,未正确处理Yocto SDK的路径重定向逻辑。当仅打包dev/staticdev包到SDK时,目标板的安装路径被直接写入配置文件,而非替换为SDK的sysroot相对路径。

解决方案步骤

  • 修正mbedtls recipe的CMake安装配置
    在mbedtls_3.6.3.bb中添加或修改以下配置,强制CMake使用变量生成相对路径的配置,避免硬编码绝对路径:

    EXTRA_OECMAKE += "\
        -DCMAKE_INSTALL_PREFIX=${prefix} \
        -DCMAKE_INSTALL_LIBDIR=${libdir} \
        -DCMAKE_INSTALL_INCLUDEDIR=${includedir} \
        -DUSE_STATIC_LIBS=ON \
        -DUSE_SHARED_LIBS=OFF \
        -DINSTALL_CMAKE_CONFIG_MODULES=ON \
        -DCMAKE_INSTALL_PREFIX:PATH=${prefix} \
    "
    
  • 确保SDK仅打包静态库相关包
    保持TOOLCHAIN_TARGET_TASK += " mbedtls-staticdev mbedtls-dev",同时在local.conf中添加以下配置,排除目标板安装的mbedtls相关包:

    IMAGE_INSTALL_remove += "mbedtls mbedtls-dev mbedtls-staticdev"
    
  • 修补CMake配置文件的路径问题
    如果上述步骤未解决问题,在recipe中添加do_install_append任务,将配置文件中的硬编码绝对路径替换为CMake的_IMPORT_PREFIX变量(该变量在SDK中会自动指向sysroot路径):

    do_install_append() {
        sed -i 's|/usr/lib/libeverest.a|${_IMPORT_PREFIX}/lib/libeverest.a|g' ${D}${libdir}/cmake/MbedTLS/MbedTLSTargets.cmake
        sed -i 's|/usr/lib/libmbedtls.a|${_IMPORT_PREFIX}/lib/libmbedtls.a|g' ${D}${libdir}/cmake/MbedTLS/MbedTLSTargets.cmake
        sed -i 's|/usr/lib/libmbedcrypto.a|${_IMPORT_PREFIX}/lib/libmbedcrypto.a|g' ${D}${libdir}/cmake/MbedTLS/MbedTLSTargets.cmake
        sed -i 's|/usr/lib/libmbedx509.a|${_IMPORT_PREFIX}/lib/libmbedx509.a|g' ${D}${libdir}/cmake/MbedTLS/MbedTLSTargets.cmake
    }
    
  • 重新构建SDK
    清理缓存后重新生成SDK:

    bitbake mbedtls -c cleanall
    bitbake <your-image> -c cleanall
    bitbake <your-image> -c populate_sdk
    

场景支持说明

Yocto SDK完全支持仅将库的开发文件(静态库、头文件、CMake配置)纳入SDK而不安装到目标板的场景,核心是正确配置TOOLCHAIN_TARGET_TASK并确保recipe生成的配置文件路径适配SDK的sysroot环境。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 04:37:33