首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Yocto & Rust -食谱无法生成正确的构建依赖关系。

Yocto & Rust -食谱无法生成正确的构建依赖关系。
EN

Stack Overflow用户
提问于 2022-05-20 09:32:15
回答 1查看 337关注 0票数 1

我正在尝试为Yocto构建一个Rust应用程序,该应用程序使用许多bindgen生成的绑定到自定义ioctl调用。我的菜谱包括以下依赖项:

代码语言:javascript
运行
复制
DEPENDS += " clang ncurses ncurses-native libsdl2"
export LIBCLANG_PATH = "${WORKDIR}/recipe-sysroot/${libdir}"

当我尝试用bitbake构建菜谱时,我会得到以下错误:

代码语言:javascript
运行
复制
|   thread 'main' panicked at 'Unable to find libclang: "the `libclang` 
    shared library at 
${WORKDIR}/tmp/work/corei7-64-poky-linux/dummy-reader-sdl2/
          0.1.0.AUTOINC+d2766c10a0-r0/recipe-sysroot/
          usr/lib/libclang.so.14.0.3 could not be opened: 
          libncurses.so.5: cannot open shared object file: No such file or directory"', 

${WORKDIR}/tmp/work/corei7-64-poky-linux/dummy-reader-sdl2/
          0.1.0.AUTOINC+d2766c10a0-r0/
          cargo_home/bitbake/bindgen-0.59.2/src/lib.rs:2144:31

当我查看recipe-sysroot/usr/lib/时,我可以看到它是用lib clang.so填充的,但是缺少libncurses.so.5 (有一个libncurses.so库)。

进一步的搜索发现,缺失的libncurses.so.5存在于recipe-sysroot/lib/中。如果我手动添加一个链接(即ln -s ../../lib/libncurses.so.5 libncurses.so.5 ),我可以重新运行、bitbake、,并通过应用程序正确构建并在目标硬件上运行。这显然是一个黑客,我需要找到一个适当的解决办法。

请注意。recipe-sysroot/lib/不包含libclang.so

如何配置我的菜谱,使其既可以:

libclang.so

  1. libncurses.so.5 & libclang.so被填充到同一个目录( recipe-sysroot/lib/

libclang.so搜索的recipe-sysroot/lib/libclang.so依赖项)。

EN

Stack Overflow用户

回答已采纳

发布于 2022-05-25 07:53:10

我的最终解决方案包括在菜谱的配置步骤中手动创建指向所需库的链接。下面的代码检查请求库是否存在于{WORKDIR}/usr/lib目录中,如果没有,它将创建一个指向{WORKDIR}/lib目录中版本的符号链接。

代码语言:javascript
运行
复制
DEPENDS += " clang ncurses libsdl2"

USR_LIB_WORKDIR = "${WORKDIR}/recipe-sysroot/${libdir}"
BASE_LIB_WORKDIR = "${WORKDIR}/recipe-sysroot/${base_libdir}"
export LIBCLANG_PATH = "${USR_LIB_WORKDIR}"

do_configure:append() {
    if [ -f ${USR_LIB_WORKDIR}/libncurses.so.5 ];
    then
      echo "libncurses.so.5 already exists"
    else
        ln -s ${BASE_LIB_WORKDIR}/libncurses.so.5 ${USR_LIB_WORKDIR}/libncurses.so.5
    fi

    if [ -f ${USR_LIB_WORKDIR}/libtinfo.so.5 ];
    then
      echo "libtinfo.so.5 already exists"
    else
        ln -s ${BASE_LIB_WORKDIR}/libtinfo.so.5 ${USR_LIB_WORKDIR}/libtinfo.so.5
    fi
}

我确信可以通过将上面的测试& create操作提取成一个单独的函数来改进菜谱,但目前我还不确定如何创建/调用使用Yocto菜谱中的参数的函数。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72316659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档