4

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 フラグのライブラリの正しい名前を知るにはどうすればよいですか? ライブラリが /lib (libpthread など) だけでなく /usr/lib にインストールされているという事実が違いを生んでいますか?

前もってありがとう、トーマー

4

2 に答える 2

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"

1 つ以上の結果が表示されます。常識を働かせて最適なものを選択してください。通常はライブラリに似た名前のパッケージですが、常にそうとは限りません。これは一般的な方法であり、DEPENDS でパッケージを見逃して、正しいパッケージを簡単に推測できない場合に役立ちます。

私の推測では、これを含むように Makefile の DEPENDS を変更する必要があります。

DEPENDS:=+libdirect +libdirectfb +libfusion +libpthread
于 2015-05-08T08:56:07.900 に答える
3

構文例については、iftop コア パッケージを参照してください。

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

それは完璧な例です。正しい構文は次のとおりです。

DEPENDS:=+libdirectfb +libpthread

于 2014-12-30T09:23:29.093 に答える