簡體   English   中英

Openwrt:如何在新包中添加特定的庫依賴項

[英]Openwrt : How to add a specific library dependency in new package

我正在嘗試為 directfb 教程添加一個包。 我按照http://wiki.openwrt.org/doc/devel/packages 中的說明進行操作。 目前,該包已成功下載到 dl 文件夾,甚至在構建目錄中進行了編譯,但是當我將安裝部分添加到 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)這一事實是否有所不同?

提前致謝,托默

關於缺少庫的消息來自從 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

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

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

這是一個完美的例子。 正確的語法應該是:

DEPENDS:=+libdirectfb +libpthread

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM