openwrt编译 Package xxx is missing dependencies for the following libraries

一、错误出现点

错误出现在package-ipkg.mk CheckDependencies函数,这个函数的作用是通过gen-dependencies.sh脚本查找模块的依赖关系并将缺失的依赖库文件的路径记录在.missing文件中。并返回错误。

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

二、.provides文件生成

同样在package-ipk.mk定义
其中IDIR_$(1):build_dir/targrt-xxx/ipkg-xxx/

@( \
   	find $$(IDIR_$(1)) -name lib\*.so\* -or -name \*.ko | awk -F/ '{ print $$$$NF }'; \
   	for file in $$(patsubst %,$(PKG_INFO_DIR)/%.provides,$$(IDEPEND_$(1))); do \
   		if [ -f "$$$$file" ]; then \
   			cat $$$$file; \
   		fi; \
   	done; $(Package/$(1)/extra_provides) \
   ) | sort -u > $(PKG_INFO_DIR)/$(1).provides

1、-name lib*.so* -or -name *.ko是find命令的选项,用于指定要匹配的文件名模式。这里查找以"lib"开头、以".so"结尾的文件,或者以".ko"结尾的文件。
2、|用于将find命令的输出作为输入传递给下一个命令。
3、awk -F/ '{ print $ $ $ $ NF }'是一个awk命令。它以/作为分隔符,将输入按字段拆分。$$$ $ NF表示通过将每个输入行的最后一个字段(文件名)打印出来。再次使用四个 $ 字符是为了转义$字符。
4、for file in …; do用于迭代一个列表中的每个元素,并将其赋值给变量file。
$ $( patsubst %, $ (PKG_INFO_DIR)/%.provides,$ $ (IDEPEND_$ (1)))是一个使用make函数patsubst的表达式。它将IDEPEND_$(1)中的每个元素,替换为 $ (PKG_INFO_DIR)/%.provides的形式,生成一个新列表。
$(…)表示在make中展开变量或执行命令。
简要说流程如下
1、IDEPEND_ $(1)这个文件列表转为xxx.provides这种类型。
2、并且会从staging_dir/target-xxx/pkginfo目录下读xxx.provides文件。
3、如果定义Package/ $(1)/extra_provides则运行。
4、排序输出的内容并生成目标provides。
总的来说这个函数会读staging_dir/target-xxx/pkginfo这个目录的.provides文件和IDEPEND_ $(1)这个文件列表的文件对比

三、

分析上面两个文件来说错误就显而易见了,在staging_dir/target-xxx/pkginfo目录下没有目标xxx.provides文件。
进一步原因是
1、目标模块未编译。
2、没有模块只依赖库

解决

1、编译目标模块。
2、定义Package/$(1)/extra_provides将需要的模块输出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值