2017-03-28 4 views
1

SDKに静的ライブラリを含める方法を検索した人は、必ずthis thread from 2014とお読みください。私は彼らが提案したものを試しましたが、うまくいかなかったのです。sdkで静的ライブラリを取得するには?

yocto megaマニュアルバージョン2.1(yocto morty)を読むと、5.9.12章にあります。 (Poky参照分布の変更)、DISABLE_STATIC変数を追加して静的ライブラリの生成を無効にすることができます。私は私のレシピにこれを追加してみました、そして、それはSDKに静的ライブラリを追加し有効にしなかった。

DISABLE_STATIC = "" 

イメージを構築するとき、私はSYSROOTでライブラリを見ることができます。しかし、SDKには入っていません。

SDKで静的ライブラリとヘッダーを取得するには、どうすればよいですか? local.confに'IMAGE_INSTALL'にstaticdevパッケージを追加して働いていたが、私はそれを行うにはしたくない何



私は自分の問題を示すレシピの例を作成しました。ディレクトリ構造はこのようなものです:

example-staticlib/ 
example-staticlib/example-staticlib_0.1.bb 
example-staticlib/files/ 
example-staticlib/files/lib.c 
example-staticlib/files/lib.h 
example-staticlib/files/Makefile 

example-staticlib_0.1.bb:

DESCRIPTION = "example stared library" 
LICENSE = "LGPLv2" 
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/LGPL-2.0;md5=9427b8ccf5cf3df47c29110424c9641a" 

SRC_URI = "file://lib.c \ 
      file://lib.h \ 
      file://Makefile" 

PR = "r0" 
S = "${WORKDIR}" 

ALLOW_EMPTY_${PN} = "1" 

do_install() { 
    oe_runmake install DEST=${D} 
} 

TOOLCHAIN_TARGET_TASK += "example-staticlib-dev" 
TOOLCHAIN_TARGET_TASK += "example-staticlib-staticdev" 

lib.c:

int foo() 
{ 
    return 42; 
} 

lib.h:

int foo(); 

メイクファイル:

TARGET=libexample.a 

all:$(TARGET) 

install : 
    @install -d $(DEST)/usr/lib/ 
    @install -m 0644 $(TARGET) $(DEST)/usr/lib/ 
    @install -d $(DEST)/usr/include/ 
    @install -m 0644 lib.h $(DEST)/usr/include/ 

$(TARGET) : lib.c 
    $(CC) -c lib.c -o lib.o 
    $(AR) rcs [email protected] lib.o 

clean: 
    rm -rf lib.o $(TARGET) 

SDKで静的ライブラリを取得するには、正確にレシピを変更するにはどうすればよいですか?

答えて

1

追加した例に従ってください。

(例えばcore-image-minimal.bbappend、または.bbappendに)あなたのイメージレシピに

TOOLCHAIN_TARGET_TASK += "example-staticlib-staticdev" 

を次の行を追加すると、あなたのために働く必要があります。 bitbake core-image-minimal -c populate_sdkを実行すると、SDKの.aファイルが提供されます。 (再び、使用される画像がcore-image-minimalであると仮定して)。

.aファイルを${PN}-devに追加する実験がうまくいかなかった場合、ファイルをパッケージに入れる方法の順番が重複しています。注文は${PN}-dbg ${PN}-staticdev ${PN}-dev ${PN}-doc ${PN}-locale ${PACKAGE_BEFORE_PN} ${PN}です。したがって、.aファイルは${PN}-staticdevに格納されます。そのパッケージは{PN}-devの前に処理されるため、

注:画像のレシピにこの行「TOOLCHAIN_TARGET_TASK += "example-staticlib-staticdev"」を追加すると、PNの代わりにパッケージ名を記述する必要があります。

+0

ええ、2行を削除してください。 '.a'ファイルは' $ {PN} -staticdev'パッケージによって自動的に選択されます。 – Anders

+0

私の追加したメモを見てください。 – Anders

+0

私の最後のコメントの前に私の答えに何を追加したかを見てください。 toolchain変数nを画像レシピの先頭に追加する必要があります。 – Anders

関連する問題