智能无法安装...没有软件包提供共享的目标文件 [英] Smart can't install...no package provides shared object file
问题描述
我正在尝试创建一个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.
- smart如何确定这些共享库文件的版本号?
- do_rootfs()任务会导致构建在此特定时间失败吗?
- 我的特定问题是否有简单的解决方案?
推荐答案
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屋!