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

tom*_*eli 4 openwrt makefile package 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
Run Code Online (Sandbox Code Playgroud)

包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))
Run Code Online (Sandbox Code Playgroud)

将+ 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
Run Code Online (Sandbox Code Playgroud)

是因为我必须以错误的方式使用DEPENDS(DEPENDS = + libdirectfb).如何为DEPENDS标志指出库的正确名称?是否将库安装到/ usr/lib而不仅仅是/ lib(如libpthread)会有所不同吗?

谢谢你,Tomer

小智 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"
Run Code Online (Sandbox Code Playgroud)

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

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

DEPENDS:=+libdirect +libdirectfb +libfusion +libpthread
Run Code Online (Sandbox Code Playgroud)