Error: Problem: conflicting requests - nothing provides libxxx.so needed by xxx

Yocto install 预编译库的问题解决。

解决方案:https://wiki.yoctoproject.org/wiki/TipsAndTricks/Packaging_Prebuilt_Libraries

错误:

Error:  Problem: conflicting requests   - nothing provides libxxx.so needed by xxx

ERROR:  do_rootfs: Could not invoke dnf. Commandreturned 1:

Added oe-repo repo from /xxx/xxx/xxx/oe-rootfs-repo

Last metadata expiration check: 0:00:00 ago on Thu 10 Dec 2019 12:47:40 AM UTC.

Error:

Problem: conflicting requests

- nothing provides APP-A.so needed by App-B-1.0-r0.cortexa53hf_neon_fp_armv8

 

ERROR:  do_rootfs: Function failed: do_rootfs

ERROR: Logfile of failure stored in: xxx/xxx/xxx/temp/log.do_rootfs.662

ERROR: Task do_rootfs failed with exit code '1'

 

背景(考虑下面的嵌入式应用场景):

1.你有两个应用程序,一个应用程序(我们叫它App-A)已经被你预编译成了库。且该App-A你并不是通过Yocto编译生成的。

因为App-A并不需要在系统启动后一直运行。只有在需要的时候,其他的App调用这个库才跑App-A。

所以,其他的App在某种程度上依赖于App-A的库文件。

2. App-B依赖于App-A.so,而你预编译库是有版本号的,例如App-A.so.0.1.2。

通过Yocto编译,可以install App-A.so.0.1.2。这没有问题。

但是,因为App-B依赖于App-A.so,所以你会想到在.bb file install App-A.so.0.1.2之后再创建一个软链接App-A.so--->App-A.so.0.1.2。

do_install() {
    install -d ${D}${libdir}    
    install -m 0755 ${S}/App_A.so.0.1.2        ${D}${libdir}
    ln -sf App_A.so.0.1.2                        ${D}${libdir}/App_A.so.0
    ln -sf App_A.so.0                              ${D}${libdir}/App_A.so
}

这时候就会出上面的do_rootfs error。

 

因为Yocto对install 预编译库及库的版本存在一些规则(详见解决方案的介绍),所以很多人也遇到过类似问题。

https://stackoverflow.com/questions/63986094/error-while-executing-do-rootfs-command-using-yocto-build

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值