OpenWRT编译错误:Package missing dependencies for the following libraries

2023-11-14

发现问题:

今天在 OpenWRT 上增加了个 package, 编译的时候,报出如下错误:

Package test_modules is missing dependencies for the following libraries:
libcrypto.so.1.0.0
libssl.so.1.0.0

 

分析问题:

在编译目录及最终输出目录都是可以找到这两个文件的,那为什么会出现这个问题呢?

既然有上面的提示,那么就找一下这个提示从哪来吧:

# shujun@server in ~/OpenWRT [16:21:20] [/dev/pts/9]
$ grep -rn "missing dependencies for the following libraries" .
./include/package-ipkg.mk:74:  echo "Package $(1) is missing dependencies for the following libraries:" >&2; \

来看一下这个文件的 74 行:./include/package-ipkg.mk

上面这段脚本的功能是:

  1. 删除 $(1).missing 文件,这个文件存在即代表有不满足的依赖
  2. 调用 ./scripts/gen-dependencies.sh 生成依赖,动作是 gen-dependencies.sh 会扫描 package里面所有的可执行文件,并将这些文件通过 readelf 和 objcopy 命令将它们所需要的依赖库都提取出来,结果是一个个的 so 文件名
  3. 这些 so 文件名通过管道送给 while 循环,在 while 循环里,grep命令把这些文件名一个一个在 $(1).provides 里面找,如果找到那么没事,如果没找到,那就说明这个文件是 missing 的,要放到 $(1).missing文件里
  4. while 结束之后,检查 $(1).missing 是否存在,如果有这个文件,那么输出编译错误,同时打印出 $(1).missing 的内容,用于提示是哪些 so 文件被丢了,当然,编译到此失败!

那么,$(1).provides 又是哪些文件呢,里面的内容又是怎么来的呢?

还是在这个文件里,只要搜一下 CheckDependencies 就能找到位置:

从上面可以看到,$(1).provides的来源有 3 个

  1. 目标package的目录里面,由 find 命令找到的所有 lib*.so 及 *.ko 文件
  2. 匹配这个模式 "patsubst %,$(PKG_INFO_DIR)/%.provides,$$(IDEPEND_$(1))" 的所有文件,这些文件的内容
  3. 由命令 $(Package/$(1)/extra_provides) 输出

由以上 3 个来源形成的一系列文件名经过 sort -u 排序并删除冗余条目后,写到 $(1).provides 文件里!

至此,$(1).provides的内容,我们就知道了。

 

解决问题:

那如何解决这个 依赖文件missing 的问题呢,相对的当然也有 3 个方法来解决:

方法1. 在目标package的目录里面,放入缺失的文件,如这个问题中的 libcrypto.so.1.0.0,libssl.so.1.0.0

# 找到那两个文件的位置,并 copy 到 目标package中

cp ./staging_dir/target-aarch64_cortex-a53+neon_glibc-2.19/usr/lib/libssl.so.1.0.0 ./package/test_modules/files/
cp ./staging_dir/target-aarch64_cortex-a53+neon_glibc-2.19/usr/lib/libcrypto.so.1.0.0 ./package/test_modules/files/

方法2. 让模式 "patsubst %,$(PKG_INFO_DIR)/%.provides,$$(IDEPEND_$(1))" 包含我们需要的文件:

    其中 $(PKG_INFO_DIR) 目录是指 staging_dir/target-aarch64_cortex-a53+neon_glibc-2.19/pkginfo,当然不同的SDK可能也不一样,这只需要通过 `find . -name "*.provides"` 即可找到。

   关键是 $$(IDEPEND_$(1)) 代表了什么,还是在同一个文件中:./include/package-ipkg.mk,在其中搜索一下 IDEPEND_$(1) 就可以找到位置,如下图所示:

实际上 $$(IDEPEND_$(1)) 的值来源于 $$(DEPENDS) 的值,而 $$(DEPENDS) 的值就是 $(DEPENDS),而这个值就是我们在 Makefile中的那个 Package/test_modules 节中定义的 DEPENDS 变量,这个变量其实就是指定了 *.provides 文件名的前面部分。

那到底是哪个文件名呢?

通过上面内容,我们知道,这些文件是在这个位置:$(PKG_INFO_DIR)/%.provides

通过搜索,我们能找到 PKG_INFO_DIR 是定义在 OpenWRT 根目录下的 rules.mk 文件中的

...
TARGET_DIR_NAME = target-$(ARCH)$(ARCH_SUFFIX)$(DIR_SUFFIX)$(if $(BUILD_SUFFIX),_$(BUILD_SUFFIX))
...
STAGING_DIR:=$(TOPDIR)/staging_dir/$(TARGET_DIR_NAME)
...
PKG_INFO_DIR := $(STAGING_DIR)/pkginfo

在我的环境里,这个目录是: OpenWRT/staging_dir/target-aarch64_cortex-a53+neon_glibc-2.19/pkginfo

进到这个目录里,我们找一下哪些文件包含了 缺失的 libcrypto.so.1.0.0, libssl.so.1.0.0

# shujun@server in ~/OpenWRT [20:26:49] [/dev/pts/1]
$ cd staging_dir/target-aarch64_cortex-a53+neon_glibc-2.19/pkginfo

# shujun@server in ~/OpenWRT/staging_dir/target-aarch64_cortex-a53+neon_glibc-2.19/pkginfo [20:26:52] [/dev/pts/1]
$ grep libcrypto.so.1.0.0 *
...
git.provides:libcrypto.so.1.0.0
libopenssl.provides:libcrypto.so.1.0.0
monit.provides:libcrypto.so.1.0.0
...

# shujun@server in ~/OpenWRT/staging_dir/target-aarch64_cortex-a53+neon_glibc-2.19/pkginfo [20:27:09] [/dev/pts/1]
$ grep libssl.so.1.0.0 *
...
git.provides:libssl.so.1.0.0
libopenssl.provides:libssl.so.1.0.0
monit.provides:libssl.so.1.0.0
...

发现确实已经有一些文件包含这两个库了,我们挑一个比较”正确“的文件,比如那个  libopenssl.provides

找到了这个,那接下来,只需在 Makefile 中的那个 Package/test_modules 节中修改 DEPENDS 变量即可:

方法3. 在目标package的 Makefile 里增加一节: $(Package/$(1)/extra_provides), 示例如下:

# 文件 OpenWRT/package/test_modules/Makefile 中加入下面一节
# 需要注意的是:中间的命令只能写在一行,否则会有 Makefile 语法错误出来

define Package/test_modules/extra_provides
  echo libcrypto.so.1.0.0; echo libssl.so.1.0.0;
endef

 

End.

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

OpenWRT编译错误:Package missing dependencies for the following libraries 的相关文章

  • openwrt下crontab定时任务实现

    openwrt下crontab定时任务实现 我的需求是需要加个定时执行脚本来监控智能网关运行的进程 一旦网关进程异常关闭 就能立即把它拉起来 从而保证网关运行的可靠性 这里我们用到了crontab服务 OpenWRT系统默认已经加入了cro
  • OpenWrt一些小问题的解决方法

    OpenWrt中文文档并不完善 国内论坛也不太照顾新人 有时遇到问题无从下手 这里整理一些常见错误提示和解决方法 我也是新手整理的不全有问题可以在评论里提出 satisfy dependencies for Cannot satisfy t
  • Openwrt编译python3时出现错误:No rule to make target `package//host/compile'

    步骤 1 在package目录下添加python3 包含Makefile files和相关patches文件 2 执行make package python3 compile V s make 1 No rule to make targe
  • (N1盒子) Openwrt 下 docker 容器访问互联网故障排除

    环境 硬件 N1盒子 Openwrt版本 openwrt flippy 60 o 情况描述 先是跑了个运行php的docker容器 日志里报错信息为 cURL error 7 Failed to connect to 域名 port 端口号
  • 在K2P路由器,非官方openwrt固件,安装软件遇到的坑!

    手上有一台斐讯K2P A2版本的路由器 一直空闲在宿舍 最近发现这个路由器被破解了 可以刷上不死breed 还有很多大神做的固件 因此我想用它刷上openwrt系统后 安装某软件 从而直接在路由器上完成学校的宽带验证登陆 接下来我就介绍我在
  • 取消GL.iNet路由器视频的密码

    每次路由器访问192 168 8 1 8083 action stream时总是无法访问 但是先进入192 168 8 1登录以后再去刷新视频就可以出来 即使取消外网登录验证也还是没效果 最后发现广大网友的意见是重新刷固件 先去GL iNe
  • 基于WR703N路由器的WIFI机器人

    可以说 wifi机器人是一个比较成熟作品了 特别是使用wr703制作wifi机器人的有很多例子 因为1 其体积小 2 实时获取视频相比STM32容易 STM32F1系列性能不够 使用OV系列的摄像头较为吃力 3 可以使用路由器连接外网 使用
  • 703n无法进入路由管理界面reset无效重刷方法

    现在没法接网线获取不到地址 winscp也登不了 请问除了ttl线外不拆机能重刷吗 安全模式恢复 具体方法如下 网线连接电脑和703n 设置电脑ip地址为192 168 1 2 掩码默认 网关192 168 1 1 电脑 gt 开始 gt
  • 基于openwrt,aria2下载器安装与配置

    迅雷下载不好用 所以用这个下载器aria2 需要安装软件 在可用软件列表中安装aria2和luci app aria2 安装完后有可能需要重启路由器 需要注意的问题 1 aria2只是一个下载工具 并没有图形界面 2 文件下载的位置 在ar
  • 基于openwrt平台搭建局域网技术验证之二

    1 测试目的 验证l2tp服务器模式的可行性 提供vpn l2tp模式的服务器功能 供客户端连接访问内网 2 参考资料 参考连接1 https www jianshu com p ccf8f2cca70e 参考连接2 https openw
  • 【openwrt学习笔记】dnsmasq源码阅读

    目录 一 DHCP Dynamic Host Configuration Protocol 1 1 前置知识 1 2 参考链接 1 3 IP地址分配代码分析 rfc2131 c dhcp common c dhcp c 1 4 几个小问题
  • openwrt调试用到的

    PC间文件共享 python3 m http server 在共享的电脑上 打开浏览器 直接输入 serverip 8000 NFS Ubuntu PC端 sudo apt get install nfs kernel server sud
  • Ubuntu16.04下交叉编译适配openwrt(CC版本)的swoole扩展库(swoole-1.10.3)

    Ubuntu16 04下交叉编译适配openwrt CC版本 的swoole扩展库 swoole 1 10 3 文章目录 Ubuntu16 04下交叉编译适配openwrt CC版本 的swoole扩展库 swoole 1 10 3 一 简
  • opkg 更新软件

    opkg 不同的版本存在不同的配置文件 一般常用的是 etc opkg conf etc opkg customfeeds conf 和 etc opkg distfeeds conf三个 这三个配置文件将会影响opkg运行时软件资源的取向
  • openwrt路由器(RP-LINK)安装python并设置开机启动程序

    由于项目需求 实际条件限制 需要在某台设备上运行一个python小程序 在工业机器人和云服务器之间实现信息转发的功能 因为机器人也需要通过路由器认证连接校园网 出于简化设备的考虑 不想每次跑程序还得开电脑 我决定尝试在路由器上运行这个程序
  • Openwrt按键检测分析-窥探Linux内核与用户空间通讯机制netlink使用

    首先看一下Openwrt系统中关于按键功能的使用和修改 以18 06版本为例 按键功能实现在脚本中 比如18 06 package base files files etc rc button reset bin sh lib functi
  • 从零开始编译OpenWrt固件

    从零开始编译OpenWrt固件 前言 进来阅读这篇文章的相信都是对OpenWrt有一定的了解的 对于OpenWrt的介绍这里就不再赘述 可以自行查找相关百科了解 OpenWrt是适合于嵌入式设备的一个Linux发行版 可以通过其提供的相关工
  • openwrt恢复出厂设置有两种方法

    1 输入以下指令 firstboot mtd r erase rootfs data 2 输入以下指令 mount root firstboot reboot f
  • 5-Openwrt package Makefile

    Openwrt package Makefile 在 Openwrt main Makefile 章节里面有说道主Makefile会通过include package Makefile调用package下的Makefile package下
  • 如何知道我的二进制可执行文件的内存占用量

    我想知道是否有办法知道用 C 语言编码的二进制可执行文件的内存占用量 有关二进制可执行文件的信息 使用OpenWrt分支 Attitude Adjustment 的工具链编译 架构为x86 在 Linux Unix 系统上 您可以使用siz

随机推荐

  • Java基础进阶资料免费分享,需要的可以在评论区留言

    Java基础进阶资料免费分享 需要的可以在评论区留言 或者扫下方的微信获取 还有其他的福利大礼包赠送哦 赶快来领取试试真假吧
  • JS数据结构之队列(Queue)

    特点 先进先出 也叫FIFO First In First Out 结构图 这跟我们生活中的排队买票很像 谁先排在前面 谁先买票 队列常见的操作 enqueue el 向队列尾部添加一个新的项 dequeue 移除队列的第一项 并返回被移除
  • Web测试需要注意的点

    一 功能测试 测试用例是测试的核心 测试用例的设计是一种思维方式的体现 在用例的设计中 用的比较多的方法是边界值分析法和等价类划分法 下面主要从输入框 搜索功能 添加 修改功能 删除功能 注册 登录功能以及上传图片功能等11个方面进行总结说
  • Java“求两个正整数的最大公约数和最小公倍数”流程图+调试+程序

    题目 求两个正整数的最大公约数和最小公倍数 基本要求 程序风格良好 使用自定义注释模板 两种以上算法解决最大公约数问题 提供友好的输入输出 提高要求 1 三种以上算法解决两个正整数最大公约数问题 2 求3个正整数的最大公约数和最小公倍数 程
  • ionic知识系列:Could not remove dir ‘/data/data/io.ionic.starter/code_cache/.ll/‘

    ionic安卓工程build出来的文件损毁 可以将android app build目录删除 执行ionic cap copy 在android studio停止android studio模拟器 再次运行app
  • Python:统计数字

    目录 题目描述 输入描述 输出描述 输入输出样例 参考代码 sort 与 sorted 区别 题目描述 某次科研调查时得到了 n 个自然数 每个数均不超过 1 5 10 9 已知不相同的数不超过 10 4个 现在需要统计这些自然数各自出现的
  • 遗传算法初探——以电力系统有功优化为例(二)

    上一篇 https blog csdn net m0 43401436 article details 106564397 我自己的代码都差点认不出来了 完整代码如下 安装matpower后可直接运行 注释写得比较清楚 结合上一篇应该能看明
  • C#中{ get; set; }写法是什么意思

    代表 属性xxx 可以 是获取或设置 如果是 仅是 set 则只能设置 反之亦然 老版本的 net framework 对于属性 不能省略 必须这样做 int adminID 0 public AdminID get return admi
  • 日志查找常用命令-超实用

    0 前言 1 命令的尾部添加 color 或者 color auto 可以使关键字带颜色 很清晰 1 Linux日志查找常用命令 1 1 cat zcat cat n app log grep error 查询日志中含有某个关键字error
  • RapidMiner是什么

    RapidMiner是世界领先的数据挖掘解决方案 在一个非常大的程度上有着先进技术 应用介绍编辑 数据挖掘过程简单 强大和直观 可以用简单脚本语言自动进行大规模进程 图形用户界面的互动原型 Java API 应用编程接口 RapidMine
  • HTML期末学生大作业-使用HTML+CSS技术仿传智博客网站

    精彩专栏推荐 文末获取联系 作者简介 一个热爱把逻辑思维转变为代码的技术博主 作者主页 主页 获取更多优质源码 web前端期末大作业 毕设项目精品实战案例 1000套 程序员有趣的告白方式 HTML七夕情人节表白网页制作 110套 超炫酷的
  • wirehark数据分析与取证Alpha-1.pcapng

    什么是wireshark wiresharek Alpha 1 pcapng数据包分析 数据包已上传资源 有问题请私信博主 wiresharek Wireshark 前称Ethereal 是一个网络封包分析软件 网络封包分析软件的功能是检索
  • input()函数的使用方法

    关键词 input 函数 摘要 input 函数的使用方法 目录 一 input 函数输入机制与强制转换 二 input 函数的提示项 三 一次性输入多个变量值 一 input 函数输入机制与强制转换 input 函数返回的数据类型均为st
  • 图像分割语义分割mobilenetv1-unet网络 基于pytorch框架制作

    图像分割语义分割mobilenetv1 unet网络 基于pytorch框架制作 全套项目 包含网络模型 训练代码 预测代码 直接下载数据集就能跑 拿上就能用 简单又省事儿 内附四五个数据 供验证使用 ID 1524966108394844
  • 分布式解决方案

    笔者会慢慢写一些关于分布式系统的解决方案 现在微服务系统的流行 所以以前的一些组件已经无法满足系统的高可用性了 笔者会慢慢的介绍一下内容 1 分布式缓存篇 redis 2 分布式存储 MongoDB Mycat 对mysql进行集成 3 分
  • webpack5配置CSS

    webpack只能解析js 需要依赖相关loader进行解析css css css loader 负责将 Css 文件编译成 Webpack 能识别的模块 style loader 会在输出文件中动态创建一个 Style标签 以模块化的形式
  • 世界会走向哪里?

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 世界会走向哪里 作者 阮一峰 1 围棋可能是世界上最复杂的游戏 在一个19根横线乘19根竖线的棋盘上面 有着无穷多种的变化 根据计算 围棋可能的下法共有2 08 x 101
  • 测试用例设计方法-边界值分析法

    边界值分析法 定义 边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法 通常边界值分析法是作为对等价类划分法的补充 这种情况下 其测试用例来自等价类的边界 与等价类区别 1 边界值分析不是从某等价类中随便挑一个作为代表 而是使这
  • oracle数据库insert报错:无效的数据类型

    今天工作中往oracle数据库中insert数据的时候遇到这样一个错误 无效的数据类型 日志也打印出error occurred setting parameters 大概就是这意思吧 具体的字母忘了 我也能看出是赋值的数据与数据库对应字段
  • OpenWRT编译错误:Package missing dependencies for the following libraries

    发现问题 今天在 OpenWRT 上增加了个 package 编译的时候 报出如下错误 Package test modules is missing dependencies for the following libraries lib