Openwrt:如何在新包中添加特定的库依赖项

Posted

技术标签:

【中文标题】Openwrt:如何在新包中添加特定的库依赖项【英文标题】:Openwrt : How to add a specific library dependency in new package 【发布时间】:2014-09-08 11:07:23 【问题描述】:

我正在尝试为 directfb 教程添加一个包。我按照http://wiki.openwrt.org/doc/devel/packages 中的说明进行操作。 目前该包已成功下载到 dl 文件夹,甚至在 build 目录中编译,但是当我将 install 部分添加到 makefile 时,出现依赖错误:

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

包Makefile(我放在package/utils/directfb_tutorials/下):

include $(TOPDIR)/rules.mk
PKG_NAME:=DFBTutorials
PKG_VERSION:=0.5.0
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://www.directfb.org/downloads/Extras/
PKG_MD5SUM:=13e443a64bddd68835b574045d9025e9
PKG_LICENSE:=LGPLv2.1
PKG_LICENSE_FILES:=COPYING
PKG_FIXUP:=autoreconf
PKG_INSTALL:=1
include $(INCLUDE_DIR)/package.mk
define Package/directfb_tutorials
    TITLE:=directfb_tutorials
    SECTION:=utils
    CATEGORY:=Utilities
    URL:=http://directfb.org
    DEPENDS:=+libdirectfb
endef
define Package/directfb_tutorials/description
    DirectFB Tutorials
endef

define Build/Configure
    $(call Build/Configure/Default,)
endef
define Package/directfb_tutorials/Build/Compile
    $(MAKE) -C $(PKG_BUILD_DIR)
endef
define Package/directfb_tutorials/install
    $(INSTALL_DIR) $(1)/bin/dfb_tutorials
    $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/image/image $(1)/bin/dfb_tutorials/
    $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/simple/simple $(1)/bin/dfb_tutorials/
    $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/keybuffer/keybuffer $(1)/bin/dfb_tutorials/
    $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/text/text $(1)/bin/dfb_tutorials/
    $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/sprite/sprite $(1)/bin/dfb_tutorials/
endef
$(eval $(call BuildPackage,directfb_tutorials))

在 DEPENDS 部分添加 +libpthread 时,libpthread.so.0 不会出现在上面的缺少依赖项错误消息中:

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

是因为我必须以错误的方式使用 DEPENDS (DEPENDS= +libdirectfb)。如何判断 DEPENDS 标志的库的正确名称?将库安装到 /usr/lib 而不仅仅是 /lib(如 libpthread)这一事实是否有所不同?

提前致谢, 托默

【问题讨论】:

是在构建过程中出错,还是在安装包时出错? (请在您的错误消息周围粘贴更多上下文) 【参考方案1】:

关于缺少库的消息来自于 include/package-ipkg.mk 触发的检查。这是包创建的最新阶段。此检查正在验证所有可执行文件是否在系统中具有所有需要的库。为了强制执行,系统要求您在“DEPENDS”部分添加一些条目。但在此之前 - 您当然需要知道要添加哪些。

要查找缺少的库提供程序,如果情况不明显(通常只是一个库名),您可以在 $STAGING_DIR/pkginfo 文件夹中搜索。就我而言,它是 staging_dir/target-mips_mips32_uClibc-0.9.33.2/pkginfo。

只需 cd 到该文件夹​​并运行类似:

grep libdirect-1.4.so.0 "*.provides"

您应该会看到一个或多个结果。使用常识来挑选最好的,通常是与库名称类似的包,但并非总是如此。这是一种通用方法,如果您错过了 DEPENDS 中的包并且无法轻易猜出正确的包,应该会有所帮助。

我的猜测是,您应该修改 Makefile 中的 DEPENDS 以包含 这个:

DEPENDS:=+libdirect +libdirectfb +libfusion +libpthread

【讨论】:

【参考方案2】:

查看 iftop 核心包的语法示例:

https://github.com/openwrt/openwrt/blob/master/package/network/utils/iftop/Makefile#L28

这是一个完美的例子。正确的语法应该是:

DEPENDS:=+libdirectfb +libpthread

【讨论】:

该链接不再有效。 github.com/openwrt/openwrt/blob/master/package/network/utils/…

以上是关于Openwrt:如何在新包中添加特定的库依赖项的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Ivy 的依赖项添加到 Eclipse PDE 目标平台?

如何将本地 aar 依赖项添加到 bintray 发布的库中?

如何从服务器中删除 NuGet 包?

NPM - 如何在不更新或添加 package.json 中描述的包的情况下安装新包

如何将 Google 视觉依赖项添加到我的 .aar?

Openwrt设置开机启动