This service is available only in Japanese-language.

オリジナルアプリケーションに付随する外部ライブラリのインストール方法について

お世話になっております。掲題の件につきましてお尋ね申し上げます。

Yoctoに組み込むオリジナルアプリケーションで使用している外部ライブラリはどのようにインストールするのでしょうか?

現状、devtool build-image core-image-minimalを実行すると下記のエラーが出ております。

===========================================
NOTE: Starting bitbake server...
NOTE: Reconnecting to bitbake server...
NOTE: Retrying server connection (#1)...
NOTE: Reconnecting to bitbake server...
NOTE: Previous bitbake instance shutting down?, waiting to retry...
NOTE: Retrying server connection (#2)...
Loading cache: 100% |#################################################################################| Time: 0:00:01
Loaded 3304 entries from dependency cache.
Parsing recipes: 100% |###############################################################################| Time: 0:00:01
Parsing of 2151 .bb files complete (2150 cached, 1 parsed). 3305 targets, 89 skipped, 0 masked, 0 errors.
INFO: Building image core-image-minimal with the following additional packages: my-app
Loading cache: 100% |#################################################################################| Time: 0:00:15
Loaded 3304 entries from dependency cache.
Parsing recipes: 100% |###############################################################################| Time: 0:00:00
Parsing of 2151 .bb files complete (2149 cached, 2 parsed). 3305 targets, 89 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies

Build Configuration:
BB_VERSION = "1.46.0"
BUILD_SYS = "x86_64-linux"
NATIVELSBSTRING = "universal"
TARGET_SYS = "x86_64-poky-linux"
MACHINE = "qemux86-64"
DISTRO = "poky"
DISTRO_VERSION = "3.1.1"
TUNE_FEATURES = "m64 core2"
TARGET_FPU = ""
meta
meta-poky
meta-yocto-bsp = "my-yocto-3.1.1:febbe2944c0c4a04b85fa98fdc261186115954d8"
meta-oe
meta-python
meta-networking = "master:698748c1538ed03efbcfdd936cf8317b4f138c29"
workspace = "my-yocto-3.1.1:febbe2944c0c4a04b85fa98fdc261186115954d8"

Initialising tasks: 100% |############################################################################| Time: 0:00:18
Sstate summary: Wanted 5 Found 3 Missed 2 Current 1257 (60% match, 99% complete)
NOTE: Executing Tasks
ERROR: my-app-1.0+git999-r0 do_package_qa: QA Issue: /usr/bin/my-app contained in package my-app requires libcurl.so.4(CURL_OPENSSL_4)(64bit), but no providers found in RDEPENDS_my-app? [file-rdeps]
ERROR: my-app-1.0+git999-r0 do_package_qa: QA Issue: /usr/bin/my-app contained in package my-app requires libmosquitto.so.1(MOSQ_1.2)(64bit), but no providers found in RDEPENDS_my-app? [file-rdeps]
ERROR: my-app-1.0+git999-r0 do_package_qa: QA Issue: /usr/bin/my-app contained in package my-app requires libmosquitto.so.1(MOSQ_1.0)(64bit), but no providers found in RDEPENDS_my-app? [file-rdeps]
ERROR: my-app-1.0+git999-r0 do_package_qa: QA Issue: /usr/bin/my-app contained in package my-app requires libmosquitto.so.1()(64bit), but no providers found in RDEPENDS_my-app? [file-rdeps]
ERROR: my-app-1.0+git999-r0 do_package_qa: QA Issue: /usr/bin/my-app contained in package my-app requires libjansson.so.4()(64bit), but no providers found in RDEPENDS_my-app? [file-rdeps]
ERROR: my-app-1.0+git999-r0 do_package_qa: QA Issue: /usr/bin/my-app contained in package my-app requires libmbedcrypto.so.1()(64bit), but no providers found in RDEPENDS_my-app? [file-rdeps]
ERROR: my-app-1.0+git999-r0 do_package_qa: QA Issue: /usr/bin/my-app contained in package my-app requires libiw.so.30()(64bit), but no providers found in RDEPENDS_my-app? [file-rdeps]
ERROR: my-app-1.0+git999-r0 do_package_qa: QA run found fatal errors. Please consider fixing them.
ERROR: Logfile of failure stored in: /home/hoge/poky/build/tmp/work/core2-64-poky-linux/my-app/1.0+git999-r0/temp/log.do_package_qa.3042
ERROR: Task (/home/hoge/poky/build/workspace/recipes/my-app/my-app_git.bb:do_package_qa) failed with exit code '1'
===========================================
レシピファイルは以下になっています。
===========================================
# Recipe created by recipetool
# This is the basis of a recipe and may need further editing in order to be fully functional.
# (Feel free to remove these comments when editing.)

# WARNING: the following LICENSE and LIC_FILES_CHKSUM values are best guesses - it is
# your responsibility to verify that the values are complete and correct.
#
# The following license files were not able to be identified and are
# represented as "Unknown" below, you will need to check them yourself:
LICENSE = "Unknown"
LIC_FILES_CHKSUM = "XXXXXXXXXXXXX"

SRC_URI = "git:///home/hoge/my-app;protocol=file"

# Modify these as desired
PV = "1.0+git${SRCPV}"
SRCREV = "4c987aa85eaccc7d9d363f027f02aecbd6ac4b56"

S = "${WORKDIR}/git"

RDEPENDS_${PN} = "libcurl curl openssl iw"

FILES_${PN} = "\
${bindir}/\
${sbindir}/\
${datadir}/\
${prefix}/\
${prefix}/bin/\
${prefix}/bin/my-app\
${base_bindir}/\
"

# NOTE: this is a Makefile-only piece of software, so we cannot generate much of the
# recipe automatically - you will need to examine the Makefile yourself and ensure
# that the appropriate arguments are passed in.

do_configure () {
# Specify any needed configure commands here
:
}

do_compile () {
# You will almost certainly need to add additional arguments here
oe_runmake
}

do_install () {
# NOTE: unable to determine what to put here - there is a Makefile but no
# target named "install", so you will need to define this yourself
install -d ${D}${bindir}
install -m 0755 my-app ${D}${bindir}
}
=========================================================
上記エラーで必要とされているレイヤを追加し、my-appのレシピにRDEPENDS_${PN}として追加していく形でしょうか?
初歩的な質問で恐縮ですが、ご教示賜れますと幸いでございます。
よろしくお願いいたします。

生成されたパッケージのQA段階で、パッケージに含まれるバイナリーからリンクされているライブラリを調べ、
それらのライブラリが RDEPENDS に記載されているかのチェックに引っかかっています。
ここで、気を付けないといけないのは
RDEPENDS に記載するのは、ライブラリが含まれるパッケージ名であって、ライブラリの生成元のレシピ名ではないと
いう点です。
ライブラリが含まれるパッケージの生成元のレシピ名を確認し、そのレシピがどのレイヤに含まれるか確認し
現在のBBLAYERSに含まれていなければ、bitbake-kayers add-layer でレイヤを追加する。
といった流れになります。

yakuhito様
ご回答いただきありがとうございます。
ご回答にある用語の整理をさせていただけますでしょうか。
「パッケージ」=イメージに追加したいオリジナルアプリケーション
「ライブラリ」=libcurl4-openssl-devやlibmosquitto-devなどの外部ライブラリ
以上の認識で合っているでしょうか?
そうであれば、RDEPENDSにはmy-appを記載するということになりますでしょうか?
https://www.yoctoproject.org/docs/2.4.2/ref-manual/ref-manual.html#var-R...
上記RDEPENDSの説明における例では、RDEPENDSにperlが追加されているため、外部ライブラリ名を追加していく認識なのですが、正しいでしょうか?例えば、今回私が追加したいlibcurl4-openssl-devですと、libcurlを追加するようなイメージです。

レシピはbitbakeの処理対象となるファイルを指します。
レシピにはパッケージを生成するソフトウェアレシピと呼ばれるものと、
レシピを集めてイメージを生成するイメージレシピと呼ばれるものがあります。

RDEPENDS変数に設定するものは、実行時に必要なパッケージとなります。
リンクしているライブラリが判明した段階で、実際のそのライブラリがどの
パッケージに含まれるか調べ、そのパッケージ名を記載することになります。

自分で作成したレシピから生成されるパッケージを実行する際に必要となる
ライブラリが有れば、そのライブラリが含まれるパッケージをRDEPENDSに
追加します。
当然ながら、そのパッケージもYoctoのbuild systemで生成されたものを
使用することになりますい。

yakuhito様
重ねてご回答いただきありがとうございます。
パッケージ、ライブラリ等、イメージがつかめてきました。ありがとうございます。
加えてお尋ねしたいことがあります。
例えば、今回私はlibcurl4-openssl-devを必要としているため、いくつか関連するエラーが出ているかと思いますが、RDEPENDSにはすでにcurlとlibcurlを追加してあるのです。
このような状態でなぜlibcurlに関するエラーが出ているのでしょうか?バージョンの違いによるものでしょうか?
また、wireless-toolsがmeta/recipes-connectivityに含まれていたようですが、最新版のdunfellにブランチを切り替えたところ、ディレクトリごと消えておりました。このように提供されているレイヤに含まれていないライブラリの場合は、自分でレイヤとレシピを作成することになりますでしょうか?

エラーメッセージの最初で libcurl.so.4(CURL_OPENSSL_4)(64bit) と記載されており、どうもyocto 環境で構築されたcurl 以外を
リンクしているように見えます。
恐らくは、DEPENDSにcurl RDEPENDSにlibcurl を追加する前にエラーを解消するため、ホスト環境内のlibcurlをリンクするように
何らかの対応を行ったのではないかと推測していますが。
一度、この対応を外してみてはいかがでしょうか。

wireless-tools に関しては、Yocto2.6 にて 廃止となっており、iw に置き換えられていますので、
iw が使えるのではと、考えます
https://www.yoctoproject.org/docs/3.1.2/ref-manual/ref-manual.html#migra...

yakuhito様
何度もご回答いただきありがとうございます。
上記エラーなのですが、DEPENDSとRDEPENDSに追加する前に特に何らかの操作を行っていないのですが、ホスト環境のlibcurlをリンクしようとしている原因として考えられることはあるでしょうか?
上記のオリジナルアプリケーションのMakefileを書き換える必要があるでしょうか?
現在の環境では、オリジナルアプリケーションはpokyの外部のディレクトリ(/home/hoge/my-app)にgit cloneして使用しております。
pokyディレクトリでは、はじめにdevtool add my-app /home/hoge/my-appとしています。my-app/Makefileをもとに、workspace内のレシピが生成されているのかと思いますが、my-app/Makefileも修正する必要があるのでしょうか?
ホストPC側のcurlをリンクしようとしていることに関係あるでしょうか?

ホスト環境に一旦ソースを展開後、configure等を実行すると、ホスト環境側のヘッダーファイルやライブラリを参照するMakefile
が残っている可能性がありますね。

devtool add で、git のURLを指定した場合は、yocto 環境のヘッダーファイル、ライブラリを参照する形での構築となりますので
DEPENDSやRDPENDS に必要な記載を行うことで、yocto環境での構築も可能になるかと。

yakuhito様
重ねてのご確認ありがとうございます。
若干質問の趣旨が変わってしまうのですが、ご教示いただいたような、devtool add my-app gitリポジトリとした場合、エラーとなってしまう状態であったため、ローカル環境に一度クローンしてきたものをフルパスで指定しておりました。
ERROR: ExpansionError during parsing /home/hoge/poky/build/workspace/recipes/recipetool/tmp-recipetool-ryuvqb1e.bb
というエラーが出ているのですが、恐らく本質的には以下のエラーが問題かと思われます。
fatal: could not read Username for 'https://gitlab-ci.hoge.com': No such device or address
上記にように、Gitの認証か何かがうまくいかずエラーとなっている状態です。
一応SSH鍵を再生成し、登録しなおすなども行いましたが、結果は変わりませんでした。
何らかの設定が別に必要でしょうか?

ホームディレクトリ以下に、~/.netrc ファイルを作成し 
以下の情報を記載すれば
fatal: could not read Username for 'https://gitlab-ci.hoge.com': No such device or address
のエラーはなくなるかと。
=================================
machine gitlab-ci.hoge.com
login username
password xxxxxxx
=================================

すみません、こちらはホストOS側の問題だったのですね。失礼いたしました。
本題に戻ると、tmp/hosttools/ldが/usr/bin/ldへのシンボリックリンクとなっているのですが、これは正しいでしょうか?
ここでホスト環境のリンカを使用しているためにホスト環境のcurlをリンクしようとしているということはございますでしょうか?
もしこちらの設定などが問題になっている場合、どのように修正すべきでしょうか?

ホスト環境のツールは、開発ホストで動作する各種ツールを生成するために使います。
ここで、構築されたYocto環境専用のツールを使用して、クロスターゲットの生成を行います。

> ここでホスト環境のリンカを使用しているためにホスト環境のcurlをリンクしようとしているということはございますでしょうか?

gitで取得したソフトウェアの構成によりますが、既にMakefile/makefile がある場合、gcc や ld と実行するコマンドが
そのまま記載されている場合は、クロス構築は出来ず、開発ホストのnative コンパイラが使用されるため、ldの検索パスも
開発ホスト側を見に行くことになります。
そのような形のmakefileだった場合には、gccやcc と記載された部分を、クロス用の環境変数 ${CC} なりに置き換えることで
クロス向けの構築が可能になります。

https://www.yoctoproject.org/docs/3.1.2/sdk-manual/sdk-manual.html#sdk-a...
辺りの記載を参考にMakefileを修正してdevtool で構築 、makefileの修正、devtool の構築のサイクルを回して、
最終的にmakefileのパッチを作成することで、cross対応レシピの生成が完了となります。

ホスト環境のツールは、開発ホストで動作する各種ツールを生成するために使います。
ここで、構築されたYocto環境専用のツールを使用して、クロスターゲットの生成を行います。

> ここでホスト環境のリンカを使用しているためにホスト環境のcurlをリンクしようとしているということはございますでしょうか?

gitで取得したソフトウェアの構成によりますが、既にMakefile/makefile がある場合、gcc や ld と実行するコマンドが
そのまま記載されている場合は、クロス構築は出来ず、開発ホストのnative コンパイラが使用されるため、ldの検索パスも
開発ホスト側を見に行くことになります。
そのような形のmakefileだった場合には、gccやcc と記載された部分を、クロス用の環境変数 ${CC} なりに置き換えることで
クロス向けの構築が可能になります。

https://www.yoctoproject.org/docs/3.1.2/sdk-manual/sdk-manual.html#sdk-a...
辺りの記載を参考にMakefileを修正してdevtool で構築 、makefileの修正、devtool の構築のサイクルを回して、
最終的にmakefileのパッチを作成することで、cross対応レシピの生成が完了となります。

yakuhito様
重ねてご回答いただきありがとうございます。
Makefileを修正することでビルドすることができました。
何度もご返信いただきありがとうございました。
お忙しいところ失礼いたしました。