我正在尝试为Yocto构建一个Rust应用程序,该应用程序使用许多bindgen生成的绑定到自定义ioctl
调用。我的菜谱包括以下依赖项:
DEPENDS += " clang ncurses ncurses-native libsdl2"
export LIBCLANG_PATH = "${WORKDIR}/recipe-sysroot/${libdir}"
当我尝试用bitbake
构建菜谱时,我会得到以下错误:
| 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
libncurses.so.5
& libclang.so
被填充到同一个目录( recipe-sysroot/lib/
中libclang.so
搜索的recipe-sysroot/lib/
或libclang.so
依赖项)。
发布于 2022-05-25 07:53:10
我的最终解决方案包括在菜谱的配置步骤中手动创建指向所需库的链接。下面的代码检查请求库是否存在于{WORKDIR}/usr/lib
目录中,如果没有,它将创建一个指向{WORKDIR}/lib
目录中版本的符号链接。
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菜谱中的参数的函数。
https://stackoverflow.com/questions/72316659
复制相似问题