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

 

 

 

 

 

 

 

 

 

 

Logo

一站式 AI 云服务平台

更多推荐