Openwrt Package xxx is missing dependencies for the following libraries 问题分析

2023-05-16

Openwrt编译时通常会遇到如下问题:

Openwrt Package xxx is missing dependencies for the following libraries: libxxx.so.*


首先检查package/xxx/Makefile中的DEPENDS是否加入了对应的依赖,如果加入了还出错,可能就是DEPENDS后面加入的库名字不正确


--------------------------------------

一个实例,我编译directfb-examples需要依赖libdirectfb这个库,我编译后提示

Package directfb-examples is missing dependencies for the following libraries:
libdirect-1.4.so.0
libdirectfb-1.4.so.0
libfusion-1.4.so.0

然后我修改package/utils/directfb-examples/Makefile文件,依据经验加入DEPENDS

define Package/directfb-examples
  SECTION:=utils
  CATEGORY:=Utilities
  TITLE:=directfb examples
  DEPENDS:=+libdirectfb
endef

再编译,还是提示

Package directfb-examples is missing dependencies for the following libraries:
libdirect-1.4.so.0
libdirectfb-1.4.so.0
libfusion-1.4.so.0

那么问题来了,我加入了DEPENDS,为什么还会报错?

首先确定报错消息是从哪里来的,经过一番查找,在文件package-ipkg.mk中有一个CheckDependencies

  define CheckDependencies
        @( \
                rm -f $(PKG_INFO_DIR)/$(1).missing; \
                ( \
                        export \
                                READELF=$(TARGET_CROSS)readelf \
                                OBJCOPY=$(TARGET_CROSS)objcopy \
                                XARGS="$(XARGS)"; \
                        $(SCRIPT_DIR)/gen-dependencies.sh "$$(IDIR_$(1))"; \
                ) | while read FILE; do \
                        grep -qxF "$$$$FILE" $(PKG_INFO_DIR)/$(1).provides || \
                                echo "$$$$FILE" >> $(PKG_INFO_DIR)/$(1).missing; \
                done; \
                if [ -f "$(PKG_INFO_DIR)/$(1).missing" ]; then \
                        echo "Package $(1) is missing dependencies for the following libraries:" >&2; \
                        cat "$(PKG_INFO_DIR)/$(1).missing" >&2; \
                        false; \
                fi; \
        )
  endef

看package-ipkg.mk文件,其主要的工作应该就是在编译完后检查所有二进制文件依赖的库。

CheckDependencies的动作则是检查你需要的库在$(PKG_INFO_DIR)/$(1).provides中是否存在,如果不在("||"这个操作)就放到$(PKG_INFO_DIR)/$(1).missing里面,如果有*.missing,那么就报错。

此外,从上面代码可看$(1)就是package的name,其他变量都可以加入打印,一一得出。我这边对应如下

$(PKG_INFO_DIR)    ——  xxx/staging_dir/target/pkginfo
$(1)  ——  directfb-examples
OK,那我们进入staging/xxx/pkginfo里面看一下发现里面有很多*.providers文件,里面内容是一些库的名字。

我们在这些文件中找一下我们缺失的库grep -r libdirectfb-1.4.so.0,结果如下

$ grep -r libdirectfb-1.4.so.0
directfb.provides:libdirectfb-1.4.so.0
directfb.provides:libdirectfb-1.4.so.0.2.0

找到了,发现在directfb.provides中包含这个库,但是providers前面为啥是directfb呢,这么非主流?库的话大家都是libxxx.providers的啊,看看directfb的Makefile就知道了

$(eval $(call BuildPackage,directfb))
由于这里使用的时directfb,所以最终生成的是directfb.provides文件。


这里补充一点,.providers文件表达了什么意思? 提供么

应该是的。我们打开directfb.provides,发现里面还有有libc、libpthread等各种库。

如果我现在有一个package,只依赖libpthread,我是否可以这样写DEPENDS:=+directfb?

个人没有实验,但是应该可以编译通过。但是你编译该package之前必须编译directfb,不太合理。


OK,原因分析完毕,所以本例有两种解决办法:

第一种:修改directfb-examples/Makefile

define Package/directfb-examples
  SECTION:=utils
  CATEGORY:=Utilities
  TITLE:=directfb examples
  DEPENDS:=+directfb
endef

第二种,修改libdirectfb/Makefile,如下所示,当然Makefile中对于的directfb也要换成libdirectfb

$(eval $(call BuildPackage,libdirectfb))

个人是按照第二种方法来的,库前面加个lib,约定俗成。








本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Openwrt Package xxx is missing dependencies for the following libraries 问题分析 的相关文章

  • 安装 Python 3.5 包“socket”pycharm 时出错

    仅使用 PyCharm 或命令提示符无法安装此软件包 Collecting socket Using cached socket 0 5 tar gz Complete output from command python setup py
  • 在 R 上安装 TDA 包时出错:目标“diag.o”的配方失败

    使用 Ubuntu 16 04 和 R 3 4 1 安装 R 包 TDA 时收到错误消息 它似乎与制作 CGAL diag cpp 和 或 diag o 最后的完整错误打印输出 有关 我仔细看了这个 在 R 上安装 TDA 包时出错 htt
  • 如果使用的 JVM 是 x86 或 x64,则以不同的方式解决 Maven 依赖关系?

    我设置了一个 Maven 存储库来托管一些 dll 但我需要我的 Maven 项目根据使用的 JVM 是 x86 还是 x64 下载不同的 dll 例如 在运行 x86 版本 JVM 的计算机上 我需要从存储库下载 ABC dll 作为依赖
  • 在同一进程中使用不同版本的Python库

    我们正在开发一个Python 库 在开发过程中 我想使用该库的某些部分来测试它的新版本 也就是说 使用稳定的代码来测试开发代码 有没有办法在 python 中做到这一点 Edit 更具体地说 我们有一个库 LibA 里面有很多有用的东西 此
  • 节点:以编程方式检查包的最新版本

    我希望我的节点包 在 npm 上发布 在新版本可用时提醒用户 如何以编程方式检查已发布软件包的最新版本并将其与当前版本进行比较 Thanks 您可以结合npmview https npmjs com package npmview 用于获取
  • 与 GNU Make 等 Python 相关的并行任务并发

    我正在寻找一种方法或者可能是一种哲学方法来如何在 python 中执行类似 GNU Make 的操作 目前 我们使用 makefile 来执行处理 因为 makefile 非常擅长通过更改单个选项 j x 进行并行运行 此外 gnu mak
  • 自动创建文件“requirements.txt”

    有时我从以下网站下载Python源代码GitHub https en wikipedia org wiki GitHub并且不知道如何安装所有依赖项 如果没有的话要求 txt文件我必须手动创建它 给定Python源代码目录 是否可以创建要求
  • Eclipse RCP - 定义依赖项的所有可能性?

    是否有一个包含所有可能性的列表 用于定义 Eclipse RCP 项目中的依赖项 也许被资源过滤了 可能的依赖关系 来自其他 Eclipse RCP 插件 按包 无需明确定义插件 jar libs 正如你所说 你可以在MANIFEST MF
  • 找不到 cygwin setup.exe 文件?

    我正在尝试将 subversion 数据包添加到 cygwin 为此我需要运行 setup exe 但我在 cygwin 文件夹中找不到它 它会位于哪里 它不是incygwin 文件夹 它位于您上次安装时放置的位置 很可能是垃圾箱或临时目录
  • 应用程序启动时突然出现 Firebase java.lang.IllegalAccessError

    突然发生崩溃安装后应用程序的初始启动 但只是第一次 第二次打开应用程序后它可以正常工作 我没有更改 firebase 代码 但可能是依赖项 但是到最新版本 所以通常它应该是一个稳定的版本 似乎有一些与 firebase 相关的问题 java
  • 使用 Brew 安装 OpenCV 永远不会完成

    所以我尝试使用 Homebrew 安装 opencv 但它不起作用 我用了brew tap homebrew science进而brew install opencv发生的情况是 gt Installing opencv from home
  • 关于 serviceloader 的 Java 9 依赖问题

    我有一个关于Java 9中的serviceloader如何根据这种情况进行更改的问题 Scenario Project gert Class Main package gert import java io ByteArrayInputSt
  • Python 导入优先级:包还是模块?

    我不清楚如何正确命名这个问题 Case 1 假设我有以下目录结构 foo bar init py bar py 如果我有 from foo import bar 我怎么知道哪个酒吧 bar py or bar init py 正在导入 有没
  • 如何在 R 中更新和重新编译 nlme 源代码

    我正在尝试更新 nlme 包 以便我可以在 gls 命令中使用大圆距离进行相关性 我正在尝试使用指定的更改来编辑源代码here http r 789695 n4 nabble com nlme spatial autocorrelation
  • mvn dependency:analyze 结果不正确

    我一直在寻找一种工具 它能够向您显示未使用的依赖项 我很快就偶然发现了 Maven 命令mvn dependency analyze 这样做的问题是 它经常检测到 未使用的 依赖项 如果缺失 这些依赖项就会导致构建失败 这是优化项目的示例
  • 在 Android 中使用 lambdaj

    有人尝试过在android开发中使用lambdaj库吗 当我创建一个简单的小型java应用程序时 它对我来说工作得很好 但我无法在android应用程序中使用它 UPDATE 我正在添加 lambdaj lambdaj 2 3 2 with
  • 解决 NuGet 版本冲突

    我正在尝试通过 NuGet 安装更新 Microsoft AspNetCore Mvc 1 1 2 gt 2 0 4 但是 更新永远不会成功 因为在遇到以下冲突后会回滚 Version conflict detected for Micro
  • Linux 软件包存储库中的 *​​-dev 软件包实际上包含什么?

    我的问题非常基本 我现在的知识也是如此 我是 Linux 的长期用户 但直到最近才对编程产生了浓厚的兴趣 我看到 Ubuntu 存储库中的许多流行应用程序都有 dev 软件包 例如洋泾浜开发者此外pidgin 我的问题是这样的 这些包裹里有
  • 我无法下载 R 中的 reshape2 包 [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我在尝试安装 R 包时收到此响应 gt installed packages reshape2 Package LibPath V
  • 我可以创建自定义 java.* 包吗?

    我可以创建一个与预定义包同名的自己的包吗在Java中 比如java lang 如果是这样 结果会怎样 这难道不能让我访问该包的受保护的成员 如果不是 是什么阻止我这样做 No java lang被禁止 安全管理器不允许 自定义 类java

随机推荐

  • 关于使用iconfont图标总生成小长方形框的解决办法

    起因是在联系仿写网易的静态页面的时候 xff0c 使用iconfont小图标的时候 xff0c 引入正确 xff0c 但是在页面上一直显示的是一个长方形小框的页面 各种搜索终于找到了解决办法 主要原因是由于iconfont css中路径不对
  • Qt和MFC的效率对比

    Qt和MFC的效率对比 之前一直做mfc xff0c 昨天看了一晚上的Qt xff0c 瞬间就喜欢上它了 xff0c Qt在windows下应该没有mfc的运行效率高 xff0c 但是我想知道差多少 xff0c 不知有没有大牛做过这方面的对
  • android 移植

    from http wiki kldp org wiki php AndroidPortingOnRealTarget s 6 1 Contents 1 Introduction 2 Copyright and Acknowledgemen
  • LD3320语音识别模块+JQ8900-TF语音模块实现简单的语音交互控制

    玩这个真的要感谢头条的强大推荐 xff0c 清明节回家的大巴车上 xff0c 无聊的刷着头条 xff0c 很智能的给我推荐了一款语音识别模块 xff0c 一直很想自己试着玩一把的我 xff0c 按奈不住 xff0c 点开视频看到了介绍 xf
  • 智能配网方案 Airkiss 技术原理介绍及应用

    写在前面 站在巨人的肩膀上 xff0c 可以看得更远 一 什么是Air Kiss 可以说AirKiss 是微信硬件平台提供的一种WIFI硬件设备快速配置连接网络的技术 xff0c 是一种创新性的信息传递技术 通过该技术可以便捷的向一台具有W
  • 谈谈Android 安全策略SElinux

    不积跬步无以至千里 xff0c 补全自己的短板 xff0c 完善体系 xff0c 站在巨人的肩膀上 xff0c 看到的更远 xff0c 写这篇文章也算是对这个知识点的总结 一 xff0c 背景 SElinux出现之前 xff0c Linux
  • AOSP添加新硬件设备开发-HAL层

    此篇文章接上一篇hidl 我们来实现hal层 hal层官方解释系统硬件抽象层 xff0c 理解为kernel的代理层 xff0c 他的存在屏蔽了不同硬件设备的差异 xff0c 根据提供的访问标准 xff0c 就可以对不同的硬件进行操作 xf
  • 解决 Windows has triggered a breakpoint in Linkage.exe问题

    这两天在做一个小项目 xff0c 里面有多线程的东东 xff0c 在调试的时候 总是遇到 Windows has triggered a breakpoint in Linkage exe 的错误 现在将这个问题和大家分享一下 前提是这样的
  • android rc文件的启动

    记录hostapd 启动方式 xff0c 多种方式可以启动一个bin hostapd android rc init rc fragment for hostapd on Android Copyright c 2002 2016 Joun
  • MTK WLAN支持多种NVRAM方案

    背景 硬件差异的前提 wifi功率会有差异 软件上可以做功率补偿方案 但是需要知道整机状态 然后设定一个flag 软件根据flag 选择使用预制的多NVRAM 简单点来说就是 根据不同条件 加载不同的NVRAM 实现原理 1 根据不同的射频
  • C51矩阵键盘

    对于键盘按键之前也是似懂非懂 xff0c 手里有一块浩豚电子的51板子 xff0c 现在跟着使用说明看一遍学习 矩阵键盘 xff0c 称为行列键盘 xff0c 在单片机上使用4条I O口作为行线 xff0c 4条I O口作为列线 xff0c
  • Ubuntu 获取 root 权限 (临时&永久)

    xfeff xfeff xfeff xfeff Ubuntu 获取 root 权限 操作环境 xff1a Win7 43 VMware Workstation 12 0 1 43 Ubuntu 12 04 1 临时获取 root 权限 xf
  • 广播Boradcast socket sendto出错 errno: 101 Network is unreachable

    关键字 xff1a linux 广播 255 255 255 255 sendto error Network is unreachable 全网广播 场景 xff1a 今天调试linux 网络编程的广播 xff0c 当向255 255 2
  • ubuntu下查看某个包是否已安装

    dpkg l dpkg l grep package name dpkg status package name 查看 var lib dpkg status 内容
  • 查看一个可执行文件或者库的依赖库

    经常需要查看一个可执行文件或者库依赖那些库文件 通常情况下这很好办 xff0c 使用ldd命令就可以了 xff0c 比如 xff1a 1 2 3 4 5 6 ldd bin bash linux vdso so 1 61 gt 0x0000
  • 构建gcc交叉编译工具链

    如何构建一个GCC 交叉编译工具链 GCC不仅是一个编译器 xff0c 它是一个开源工程 xff0c 可以让你建立各种编译器 一些编译器支持多线程 xff0c 一些支持共享库 xff0c 一些支持 Multilib xff08 典型的应用是
  • buildroot VS yocto

    翻译自Buildroot vs OpenEmbedded or Yocto Project A Four Hands Discussion 2016 pdf Buildroot 和 yocto的对比 对比内容 xff1a xff08 1 x
  • git查看各个branch之间的关系图

    提供两种方法 xff1a 1 使用git log命令 git log graph decorate oneline simplify by decoration all 说明 xff1a decorate 标记会让git log显示每个co
  • CUDA入门(一)

    最近我也都在看CUDA xff0c 自己看书和练习也都搞了一个月了 而且经常在CSDN上逛 xff0c 也发现了很多问题 xff0c 所以决定自己写点这方面的东西 xff0c 方便自己也方便后来人 根据我的调查 xff0c 我发现现在的初学
  • Openwrt Package xxx is missing dependencies for the following libraries 问题分析

    Openwrt编译时通常会遇到如下问题 xff1a Openwrt Package xxx is missing dependencies for the following libraries libxxx so 首先检查package