Tina库依赖 Package XXX is missing dependencies for the following libraries

博客指出在Tina或OpenWrt中出现‘Package XXX is missing dependencies for the following libraries’错误是由依赖问题导致。一是Makefile中未加入依赖,添加即可;二是依赖书写有误使编译系统找不到,以jsoncpp为例说明需查看其Makefile来顺利找到依赖。

在Tina或者openwrt中出现 Package XXX is missing dependencies for the following libraries错误
都是依赖引起的。

第一种是没有在Makefile中加入依赖,会出现编译错误,只要加上就好了,如下:

DEPENDS:=+jsoncpp 

第二种是依赖写的有问题导致编译系统没找到引起的。例如:

DEPENDS:=+jsoncpp 

编译时就回去package下找 jsoncpp,如果找不到就会报错。
而如何顺利的找到jsoncpp,这就要看jsoncpp的Makefile了,如下的就能找到了

define Package/jsoncpp

如果DEPENDS:=+libjsoncpp 编译就会出错,它会找define Package/libjsoncpp

make menuconfig中也可以看出,在 Help中就有了
在这里插入图片描述

你遇到了一个常见但关键的问题: > ❌ `Package xxx is missing dependencies for the following libraries: libpthread.so.0 librt.so.1 libuci.so` 这表示:**你的可执行文件依赖这些共享,但在 OpenWrt 的包系统中没有声明对应的运行时依赖(`DEPENDS`)**。 --- ## 🔍 问题本质 你在编译时链接了 `-lpthread -lrt -luci`,但 OpenWrt 的 `ipkg` 包管理系统在打包时检测到: - 可执行文件使用了 `libpthread.so.0` - 但你的 `Makefile` 没有声明它依赖 `+libpthread` - 所以拒绝打包或安装时报错 --- ## ✅ 正确解决方案:在 OpenWrt 包的 `Makefile` 中显式声明依赖 ### ✅ 修改你的 OpenWrt 包的顶层 `Makefile`(不是 src/ 下的那个!) ```makefile define Package/your-package-name TITLE:=Your WPA Control Program CATEGORY:=Network DEPENDS:=+libuci +libpthread +librt SECTION:=net endef ``` ### 🔍 关键点解释: | 依赖项 | 对应的 | 说明 | |--------|----------|------| | `+libuci` | `libuci.so` | UCI 配置接口 | | `+libpthread` | `libpthread.so.0` | POSIX 线程支持 | | `+librt` | `librt.so.1` | 实时扩展(如 `timer_create`, `mq_open` 等) | > ⚠️ 注意:OpenWrt 中这些是独立的 package,必须显式声明! --- ## 🧪 验证方法:检查生成的 `.ipk` 控制信息 构建完成后,进入: ```bash ls bin/packages/aarch64_cortex-a53/libuci_*.ipk ``` 然后解压 `.ipk` 查看 `CONTROL/control` 文件: ```bash tar -xzf your-package.ipk cat CONTROL/control ``` 你应该看到类似: ``` Package: your-package Version: 1.0 Depends: libuci, libpthread, librt Architecture: aarch64_cortex-a53 Section: net ``` ✅ 如果 `Depends` 字段包含这三个 → 正确 --- ## ❌ 常见错误写法(不要这么做) ```makefile # 错误!这不是 OpenWrt 的依赖语法 DEPENDS:=libuci.so libpthread.so.0 ``` ```makefile # 错误!缺少 `+` 符号 DEPENDS:=libuci libpthread librt ``` ✅ **正确格式是:`+<package-name>`** --- ## ✅ 补充建议:静态链接避免动态依赖(可选) 如果你不想让用户安装额外,可以尝试 **静态链接部分功能** ### 示例(适用于小工具): ```makefile LDFLAGS += -static -luci -lpthread -lrt -lcrypto -lm ``` 但这会带来问题: - 体积变大 - `libuci.a` 不一定提供 - OpenWrt 默认禁用全静态编译(glibc 问题) 👉 推荐做法仍是:**动态链接 + 正确声明依赖** --- ## ✅ 完整的 OpenWrt 包 Makefile 示例 ```makefile include $(TOPDIR)/rules.mk PKG_NAME:=wifi-as-wan PKG_VERSION:=1.0 PKG_RELEASE:=1 include $(INCLUDE_DIR)/package.mk define Package/wifi-as-wan SECTION:=net CATEGORY:=Network TITLE:=WiFi as WAN client with WPA control DEPENDS:=+libuci +libpthread +librt endef define Build/Prepare mkdir -p $(PKG_BUILD_DIR) $(CP) ./src/* $(PKG_BUILD_DIR)/ endef define Build/Configure # nothing endef define Build/Compile $(MAKE) -C $(PKG_BUILD_DIR) \ CC="$(TARGET_CC)" \ CFLAGS="$(TARGET_CFLAGS) -I$(PKG_BUILD_DIR) -DCONFIG_CTRL_IFACE_UNIX" \ LDFLAGS="-luci -lpthread -lrt" \ all endef define Package/wifi-as-wan/install $(INSTALL_DIR) $(1)/usr/bin $(INSTALL_BIN) $(PKG_BUILD_DIR)/wifi_as_wan $(1)/usr/bin/ endef $(eval $(call BuildPackage,wifi-as-wan)) ``` --- ## ✅ 如何验证最终结果? ### 在目标设备上运行: ```bash opkg install wifi-as-wan_1.0_aarch64_cortex-a53.ipk ``` 如果没有提示“missing dependency”,并且能运行: ```bash ldd /usr/bin/wifi_as_wan ``` 输出应类似: ``` libuci.so => /usr/lib/libuci.so (0x...) libpthread.so.0 => /usr/lib/libpthread.so.0 (0x...) librt.so.1 => /usr/lib/librt.so.1 (0x...) ... ``` ✅ 表示依赖已满足。 --- ## ✅ 总结 | 问题 | 原因 | 解决方案 | |------|------|-----------| | 缺少 `libpthread.so.0` 等依赖提示 | 包未声明运行时依赖 | 添加 `DEPENDS:=+libpthread +librt +libuci` | | 虽然编译成功但无法安装 | opkg 拒绝安装无依赖声明的包 | 必须在 `Package/xxx` 中定义 | | 动态找不到 | 未安装对应 lib package | 使用 `opkg install libuci libpthread librt` | > 💡 **核心原则:在 OpenWrt 中,所有非基础 C 依赖都必须显式声明!** ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值