如何在Yocto原生sysroot中添加libseccomp库?
我正在尝试为Yocto原生构建工具编译PKCS #11代理(pkcs11-proxy),编译时出现以下错误:
/home/user/build/tmp-glibc/hosttools/ld: cannot find -lseccomp: No such file or directory
Yocto中已经包含libseccomp的配方meta-poky/meta/recipes-support/libseccomp/libseccomp_2.5.3.bb,我在pkcs11-proxy的配方中添加DEPENDS = "libseccomp-native"后,又出现新错误:
ERROR: Nothing PROVIDES 'libseccomp-native' (but virtual:native:/home/user/meta-deif/recipes-devtools/pkcs11-proxy/pkcs11-proxy.bb DEPENDS on or otherwise requires it). Close matches: libcomps-native libsm-native libsoup-native
ERROR: Required build target 'machine' has no buildable providers. Missing or unbuildable dependency chain was: ['machine', 'bootstrapfiles', 'pil-u-boot', 'pkcs11-proxy-native', 'libseccomp-native']
我试过多种DEPENDS的写法都没用,请问该如何将libseccomp加入原生sysroot?目前临时解决方法是把.so文件手动添加到Docker容器中。
步骤1:开启libseccomp的native构建支持
Yocto默认的libseccomp配方没有开启native构建,你需要在自己的自定义层中创建一个bbappend文件(路径示例:meta-yourlayer/recipes-support/libseccomp/libseccomp_2.5.3.bbappend),添加以下内容:BBCLASSEXTEND = "native"这个配置会让Yocto生成
libseccomp-native包,供原生构建环境调用。步骤2:配置pkcs11-proxy的依赖
根据你的配方类型做对应配置:- 如果是单独的native配方(如
pkcs11-proxy-native.bb),直接添加:DEPENDS = "libseccomp-native" - 如果是在主配方中通过
virtual:native实现原生构建,先确保配方里已经添加inherit native,再加入上述DEPENDS配置。
- 如果是单独的native配方(如
步骤3:重新执行构建
运行bitbake pkcs11-proxy-native(或对应你的构建目标命令),Yocto会自动构建libseccomp-native并将其安装到原生sysroot中,解决链接阶段找不到-lseccomp的问题。
内容的提问来源于stack exchange,提问作者Kjeld Flarup

