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

时间:2014-09-08 11:07:23

标签: makefile package openwrt directfb

我正在尝试为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))

将+ libpthread添加到DEPENDS部分时,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)会有所不同吗?

提前致谢, Tomer的

2 个答案:

答案 0 :(得分:6)

有关缺少库的消息来自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

答案 1 :(得分:3)

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

https://dev.openwrt.org/browser/trunk/package/network/utils/iftop/Makefile

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

DEPENDS:=+libdirectfb +libpthread