This service is available only in Japanese-language.
自作ライブラリlibfoo.soと、このライブラリを使用するためのfoo.hをSDKに含めようとしています。
libfoo.soは無事にSDKに含めることができたのですが、foo.hがSDKに含まれていません。
レシピは以下のものを使用しています。
どうすればfoo.hを含めることができるか、アドバイスいただけますでしょうか。
SUMMARY = "Simple foo library"
SECTION = "libs"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
PACKAGES = "${PN}"
PROVIDES = "${PN}"
FILES_${PN} += "${libdir}/libfoo.so"
FILES_${PN}-dev += "${libdir}/libfoo.so \
${includedir}/foo.h "
INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
SRC_URI = "file://.."
S = "${WORKDIR}/libfoo"
TARGET_CC_ARCH += "${LDFLAGS}"
do_compile() {
oe_runmake
}
do_install() {
install -d ${D}${libdir}
install -m 0755 libfoo.so ${D}${libdir}
install -d ${D}${includedir}
install -m 0755 ${S}/../include/foo.h ${D}${includedir}/
}
ファイルの位置は以下のようになっています。
recipes-xxx
└─libfoo/
├── include
│ └── foo.h
├── libfoo
│ ├── Makefile
│ └── foo.c
└── libfoo_1.0.bb
yakuhito
2021/5/26 (水) 17:12
TMPDIR以下には、どのようにファイルが展開されていますか?
conf/local.conf 内で INHERIT += "rm_work" が有効になっている場合は、無効化した上で
tmp-glibc/work/[ARCJ]/libfoo/1.0/ 以下、どのようにファイルが展開されているか確認されると良いかと。
mackey
2021/5/31 (月) 08:55
libfooフォルダが生成されていないようです
libfooフォルダは生成されていないようなのですが、下記debパッケージは見つかりました。
build-openstlinuxweston-stm32mp1-portsetting/tmp-glibc/work/stm32mp1_portsetting-ostl-linux-gnueabi/st-image-xxx/1.0-r0/oe-sdk-repo/cortexa7t2hf-neon-vfpv4/libfoo_1.0-r0.12_armhf.deb
libfoo.soがSDKに含まれる点については本debによるものと思われます。
dpkg -c libfoo1.0-r0.12_armhf.deb
drwxrwxrwx root/root 0 2021-05-25 12:47 ./
drwxr-xr-x root/root 0 2021-05-25 12:47 ./usr/
drwxr-xr-x root/root 0 2021-05-25 12:47 ./usr/lib/
-rwxr-xr-x root/root 5276 2021-05-25 12:47 ./usr/lib/libfoo.so
mackey
2021/5/31 (月) 09:10
度々失礼します。解決した模様です。
SDKにヘッダファイルを加えることができましたので、報告させていただきます。
FILES_${PN} +=にもまたヘッダファイルを加えることで、SDKにもヘッダファイルが加わりました。
ヘッダファイルを必要としているのはSDKなのでFILES_${PN}-dev にのみ加えればよいのかと考えていたのですが、誤りだったのでしょうか。
yakuhito
2021/5/31 (月) 09:11
こちらはパッケージが展開されたイメージ用のワークエリアですね
レシピ等に変更が無い場合、SSTATE_DIR に保存された中間生成物が利用されるため
libfoo 関連のディレクトリが生成されていないかと。
一度、bitbake -c cleansstate libfoo
と、libfoo に関係するSSTATEをクリアした後、再度bitbakeを実行すると、libfoo関連の
ワークエリアが生成されます。
mackey
2021/5/31 (月) 09:33
ご回答ありがとうございます
最初に投稿しましたレシピの記載(FILES_${PN} += はlibfoo.soのみ)に戻しまして、
cleanstate後再度bitbake(populate_sdk)を行いました。
libfooフォルダが生成され、以下のような構成となっていました。
.
├── 1.0-r0
│ ├── configure.sstate
│ ├── deploy-debs
│ │ └── cortexa7t2hf-neon-vfpv4
│ │ └── libfoo_1.0-r0.15_armhf.deb
│ ├── image
│ │ └── usr
│ │ ├── include
│ │ │ └── foo.h
│ │ └── lib
│ │ └── libfoo.so
│ ├── include
│ │ └── foo.h
│ ├── libfoo
│ │ ├── libfoo.so
│ │ ├── Makefile
│ │ └── foo.c
│ ├── libfoo_1.0.bb
│ ├── package
│ │ └── usr
│ │ ├── include
│ │ │ └──foo.h
│ │ └── lib
│ │ └── libfoo.so
│ ├── packages-split
│ │ ├── libfoo
│ │ │ └── usr
│ │ │ └── lib
│ │ │ └── libfoo.so
│ │ └── libfoo.shlibdeps
│ ├── pkgdata
│ │ ├── libfoo
│ │ ├── runtime
│ │ │ ├── libfoo
│ │ │ └── libfoo.packaged
│ │ ├── runtime-reverse
│ │ │ └── libfoo -> ../runtime/libfoo
│ │ ├── runtime-rprovides
│ │ └── shlibs2
│ ├── pseudo
│ │ ├── files.db
│ │ ├── logs.db
│ │ ├── pseudo.lock
│ │ ├── pseudo.log
│ │ ├── pseudo.pid
│ │ └── pseudo.socket
(以下二階層より下省略)
│ ├── recipe-sysroot
│ ├── recipe-sysroot-native
│ ├── source-date-epoch
│ ├── sstate-install-deploy_source_date_epoch
│ ├── sstate-install-package
│ ├── sstate-install-packagedata
│ ├── sstate-install-package_write_deb
│ └── temp
yakuhito
2021/5/31 (月) 10:02
PACKAGES変数の指定が libfoo のみとなっていますね。
packages-split 以下に生成されたディレクトリが libfoo のみとなっています。
PACKAGES変数をレシピ内で指定しなければ、デフォルトでlibfoo libfoo-dbg libfoo-dev libfoo-doc libfoo-src 辺りのパッケージが生成され、FILES_${PN}-dev の指定も有効になったのではないかと。
mackey
2021/5/31 (月) 13:25
libfoo-dev等は生成されましたが、エラーが発生しています。
PACKAGES変数をレシピ内から指定しないよう、記載を削除し、cleansstate後populate_sdkしましたところ、
libfoo-dev等は生成されました。しかし、この変更によりエラーが発生しています。
Reading package lists...
Building dependency tree...
Package libfoo is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
E: Package 'libfoo' has no installation candidate
なお、レシピのdo_installの記載は先に送りました記載から変更しておらず、makefileの記載は以下のとおりです。
TARGET=libfoo.so
SRCS=foo.c
all:
${CC} ${SRCS} -I../include -shared -fPIC -o ${TARGET}
install:
sudo cp ${TARGET} /usr/local/lib;
sudo ldconfig;
clean:
rm -f ${TARGET}
yakuhito
2021/6/1 (火) 16:02
libfoo の中身は確認されていますか?
packages-split 内でのファイルの配置ですが、PACKAGES変数に libfoo のみ指定した際は以下のように
libfoo パッケージ内に、usr/lib/libfoo.so が含まれ実体となるパッケージが生成されています。
│ ├── packages-split
│ │ ├── libfoo
│ │ │ └── usr
│ │ │ └── lib
│ │ │ └── libfoo.so
現状は、どのようなファイルが生成されていますでしょうか?
また、sdk生成元のイメージレシピに対して、libfooはどのように追加指定していますか?
・IMAGE_INSTALL 変数でlibfooを指定
・IMAGE_INSTALL 変数で指定されたパッケージの生成元のレシピ内で、DEPENDS/RDEPENDS で依存関係を記載