[yocto] How to create and install a library in yocto -- Hello Library

Jussi Kukkonen jussi.kukkonen at intel.com
Wed Sep 30 05:08:51 PDT 2015


On 30 September 2015 at 04:28, Simon Castillo <smcas_m at yahoo.com.mx> wrote:

> Hello to all,
>
> I have searching for a way to include a library-only in yocto.  I found
> couple links with suggestions but I was unsuccessful in the to package it
> in the final image.  Reading the yocto documentation, I see a paragraph
> mentioning about static libraries but there is no examples.
>
>  I will try to be precise with the hopes to find help to tackle this issue.
>
> NOTE:   Couple steps like creating a LICENSE file, crate the layer and
> update the local.conf file are omitted
>
> ===============================
> The problem:
> - Creating a library that it is desired to be part of the final image (for
> example core-image-base, core-image-sato). No application, only a library
> ==============================
> Test scenario:
>
> Let's say that we desire to create a simple library called simple lib.
>
> The source code is as follows (taken from this link [
> http://www.adp-gmbh.ch/cpp/gcc/create_lib.html], copied here just for
> convenience)
>
> calc_mean.c
> //#include <stdio.h>
>
> double mean(double a, double b) {
>   return (a+b) / 2;
> }
>
> calc_mean.h
> double mean(double, double);
>
> Now we want to create a recipe that can compile, create a library and can
> be included in the final image (let's assume core-image-base)
>
> ============================
> RECIPE
> Recipe name => simplelib_0.1.0.bb
> ===========================
>
> DESCRIPTION = "Simple Library on yocto"
> LICENSE = "GPLv2"
> LIC_FILES_CHKSUM = "file://LICENSE;md5=c0b0999e102092552f1dfe93fb9b0068"
>
> PR = "r0"
> SRC_URI = "file://simplelib.zip"
>
> S = "${WORKDIR}/simplelib/"
>
> do_compile(){
>         ${CC} -c calc_mean.c -o calc_mean.o
>         ${AR} rcs libmean.a calc_mean.o
> }
>
> do_install{
>         install -d ${D}${libdir}
>         install -m 0644 libmean.a ${D}${libdir}
> }
> =====================
> Test results for RECIPE:
>
> $ bitbake simplelib
>
> RUNS without any problem.  The files generated are shown below
>
> ├── configure.sstate
> ├── deploy-ipks
> │   └── cortexa8hf-vfp-neon
> │       ├── simplelib-dbg_0.1.0-r0_cortexa8hf-vfp-neon.ipk
> │       ├── simplelib-dev_0.1.0-r0_cortexa8hf-vfp-neon.ipk
> │       └── simplelib-staticdev_0.1.0-r0_cortexa8hf-vfp-neon.ipk
> ├── image
> │   └── usr
> │       └── lib
> │           └── libmean.a
> ├── license-destdir
> │   └── simplelib
> │       ├── generic_GPLv2
> │       └── LICENSE
> ├── package
> │   └── usr
> │       └── lib
> │           └── libmean.a
> ├── packages-split
> │   ├── simplelib
> │   ├── simplelib-dbg
> │   ├── simplelib-dev
> │   ├── simplelib-doc
> │   ├── simplelib-locale
> │   └── simplelib-staticdev
> │       └── usr
> │           └── lib
> │               └── libmean.a
>
├── pkgdata
> │   ├── runtime
> │   │   ├── simplelib
> │   │   ├── simplelib-dbg
> │   │   ├── simplelib-dbg.packaged
> │   │   ├── simplelib-dev
> │   │   ├── simplelib-dev.packaged
> │   │   ├── simplelib-doc
> │   │   ├── simplelib-locale
> │   │   ├── simplelib-staticdev
> │   │   └── simplelib-staticdev.packaged
> │   ├── runtime-reverse
> │   │   ├── simplelib-dbg -> ../runtime/simplelib-dbg
> │   │   ├── simplelib-dev -> ../runtime/simplelib-dev
> │   │   └── simplelib-staticdev -> ../runtime/simplelib-staticdev
> │   ├── runtime-rprovides
> │   ├── shlibs2
> │   └── simplelib
> ├── pseudo
> │   ├── files.db
> │   ├── logs.db
> │   ├── pseudo.lock
> │   ├── pseudo.log
> │   ├── pseudo.pid
> │   └── pseudo.socket
> ├── simplelib
> │   ├── calc_mean.c
> │   ├── calc_mean.h
> │   ├── calc_mean.o
> │   ├── libmean.a
> │   └── LICENSE
> ├── sysroot-destdir
> │   ├── sysroot-providers
> │   │   └── simplelib
> │   └── usr
> │       └── lib
> │           └── libmean.a
>
> ===============
> Test result to include library in the image
>
> $ bitbake core-image-base
>
> FAILS,
>
>  * opkg_install_cmd: Cannot install package simplelib.
>
> ERROR: Function failed: do_rootfs
>
> ==============
> TRY ONE,
>
> Change the recipe and add RDEPENDS_${PN}-dev = ""  as suggested by
> https://lists.yoctoproject.org/pipermail/yocto/2014-September/021676.html
>
> FAILS, same error
>  * opkg_install_cmd: Cannot install package simplelib.
>

This really should help: your problem is probably that the actual simplelib
package is not created (because there are no files to put into it), but the
-dev package still RDEPENDS on it by default. The log file might give you
more details though.  "grep RDEPENDS pkgdata/runtime/*" in work directory
should show what the RDEPENDS are.

How are you adding the library to your image? You should be adding the
package "simplelib-staticdev" to it (assuming you really only want a static
.a).



> =============
> TRY TWO
>
> Modify recipe adding below lines (based on
> http://stackoverflow.com/questions/28792597/how-to-add-a-new-library-using-yocto
> )
>
> PACKAGES = "${PN} ${PN}-dev ${PN}-dbg ${PN}-staticdev"
>
> FILES_${PN} = " \
>         ${libdir}/simplelib/ \
> "

FAILS, same error
>  * opkg_install_cmd: Cannot install package simplelib.
> ===============
>

This SO question was fixing a slightly different problem: adding any files
to FILES_${PN} would solve your problem as well (because the ${PN} package
would then exist) but the files you refer to do not exist so nothing is
added...

I am sure that it is something simple and common that many have done in the
> past but unfortunately I can not find an example on how to do it.  Hope
> somebody could provide a hint on how to fix this problem.
>


Hope that helps,
  Jussi
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.yoctoproject.org/pipermail/yocto/attachments/20150930/01a4f7c2/attachment.html>


More information about the yocto mailing list