智能无法安装...没有软件包提供共享的目标文件 [英] Smart can't install...no package provides shared object file

查看:95
本文介绍了智能无法安装...没有软件包提供共享的目标文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试创建一个Bitbake食谱,该食谱将Oracle JRE 8安装到我的目标OS上.

I'm attempting to create a Bitbake recipe which will install Oracle JRE 8 onto my target OS.

我尝试使用 meta-oracle-java ,但由于为通用JRE提供的 .inc 文件之一具有JRE-7特定的URI而存在一些困难.

I've tried to use metadata from meta-oracle-java, but had some difficulties due to one of the .inc files which are provided for general JREs has a JRE-7-specific URI.

我已经从meta-oracle-java更改了一些元数据,并创建了自己的食谱来进行此安装.

I've changed some of the metadata from meta-oracle-java and created my own recipe to do this install.

单独构建配方时:

bitbake oracle-jse-jre

构建完成,没有错误.我已经在 oracle-jse-jre 配方中添加了对 libav 的依赖关系,因此我可以通过 TMPDIR 执行以下操作:

The build completes without error. I've added a dependency on libav into the oracle-jse-jre recipe, so I can do the following from TMPDIR:

$ find . -name libavformat*so 
./work/core2-64-poky-linux/libav/9.18-r0/sysroot-destdir/usr/lib/libavformat.so.54.20.4
./work/core2-64-poky-linux/libav/9.18-r0/sysroot-destdir/usr/lib/libavformat.so
./work/core2-64-poky-linux/libav/9.18-r0/sysroot-destdir/usr/lib/libavformat.so.54
./sysroots/genericx86-64/usr/lib/libavformat.so.54.20.4
./sysroots/genericx86-64/usr/lib/libavformat.so
./sysroots/genericx86-64/usr/lib/libavformat.so.54

运行时依赖成功

如果我将 oracle-jse-jre 食谱中的默认软件包添加到另一个食谱 xenoros_0.1.bb 的 RDEPENDS _ $ {PN} 中,code>,我可以运行 bitbake xenoros 并进行构建,而不会出现错误.

Runtime Dependency Success

If I add the default package from the oracle-jse-jre recipe to RDEPENDS_${PN} of another recipe xenoros_0.1.bb, I can run bitbake xenoros and build without errors.

如果将 xenoros 添加到 core-image-xenoros IMAGE_INSTALL 变量中,则构建将失败,并出现以下错误:

If I add xenoros to the IMAGE_INSTALL variable of a core-image-xenoros, the build fails with the following error:

ERROR: Unable to install packages. Command '/home/presslertj/yocto-OS/poky-jethro-build/build/tmp/sysroots/x86_64-linux/usr/bin/smart --log-level=warning --data-dir=/home/presslertj/yocto-OS/poky-jethro-build/build/tmp/work/genericx86_64-poky-linux/core-image-my-server/1.0-r0/rootfs/var/lib/smart install -y message-generation@core2_64 catkin@core2_64 python-distutils@core2_64 ldd@core2_64 xenoros@core2_64 rosgraph@core2_64 gedit@core2_64 actionlib@core2_64 python-compression@core2_64 dhcp-server@core2_64 libpthread-stubs@core2_64 tf2@core2_64 python-email@core2_64 catkin-dev@core2_64 git@core2_64 rosbash@core2_64 python-json@core2_64 python-wstool@core2_64 connman@core2_64 ros-config@core2_64 packagegroup-core-boot@genericx86_64 libsdl-1.2-0@core2_64 rosjava@core2_64 quagga@core2_64 nginx@core2_64 rospy@core2_64 apt@core2_64 libc6@core2_64 netcat@core2_64 shadow@core2_64 bash@core2_64 roscpp@core2_64 roslaunch@core2_64 run-postinsts@all python-rosinstall@core2_64 elfutils@core2_64 openssl@core2_64 font-alias@all gradle@core2_64 python-catkin-pkg@core2_64 catkin-runtime@core2_64 catkin-runtime-dev@core2_64 pciutils@core2_64 base-passwd@core2_64' returned 1:
Loading cache...
Updating cache...               ######################################## [100%]

Computing transaction...error: Can't install oracle-jse-jre-1.8.0-u77r0@core2_64: no package provides libavformat.so.53(LIBAVFORMAT_53)(64bit)

ERROR: Function failed: do_rootfs
ERROR: Logfile of failure stored in: /home/presslertj/yocto-OS/poky-jethro-build/build/tmip/work/genericx86_64-poky-linux/core-image-my-server/1.0-r0/temp/log.do_rootfs.22073
ERROR: Task 7 (/home/presslertj/yocto-OS/poky-jethro-build/meta-myLayer/recipes-core/images/core-image-my-server.bb, do_rootfs) failed with exit code '1'

TMPDIR 里面,我可以找到:

/sysroots/genericx86-64/usr/lib/libavformat.so.54

似乎存在版本不匹配,其中smart期望版本53,但提供了54.

It seems there's a version mismatch, where smart expects version 53, but 54 is provided.

只是为了测试正在发生的事情,我制作了一个配方来获取 libav 0.8.17 版本(使用版本53).当使用它代替 9.18 时,我遇到了完全相反的问题,这个问题很聪明,但是找不到54版本.

Just to test what's going on, I've made a recipe which fetches version 0.8.17 of libav (which uses version 53). When using this instead of 9.18, I have the exact opposite problem, that smart expects but can't find version 54.

  1. smart如何确定这些共享库文件的版本号?
  2. do_rootfs()任务会导致构建在此特定时间失败吗?
  3. 我的特定问题是否有简单的解决方案?

推荐答案

1)这不是很聪明,而是rpmbuild,它添加了从ELF DT_NEEDED 字段派生的依赖项(请参阅 elfutils-a ).

1) It's not smart, but rather rpmbuild, that is adding dependencies derived from the ELF DT_NEEDED field (see elfutils -a).

2) do_rootfs()任务由于未解决的依赖关系而失败.

2) The do_rootfs() task is failing because of unresolved dependencies.

3)由于您使用的是Poky/Yocto和rpm5,因此有一种简单的方法可以掩盖此问题(替换导致您胃灼热的任何依赖项)

3) Since you are using Poky/Yocto and rpm5, there is a simple way to mask the issue (substituting whatever dependencies are causing you heartburn)

echo "unresoved_dependency" > /etc/rpm/sysinfo/Providename

那只是一个创可贴;您仍然需要找出包装问题,而不是掩盖如何构建rpm软件包的根本问题.

That is just a band-aid; you still need to figure out the packaging issues rather than masking the underlying problem with how you are building rpm packages.

这篇关于智能无法安装...没有软件包提供共享的目标文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆