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

Simon Castillo smcas_m at yahoo.com.mx
Wed Sep 30 10:11:57 PDT 2015


Hi Jussie,

Thanks for your help and hints.  I was able to find a solution.

For those interested, the recipe is shown below:

 ============================
 
 RECIPE
 
 Recipe name => simplelib_0.1.1.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/"
 
 PACKAGES = "${PN} ${PN}-dev ${PN}-dbg ${PN}-staticdev"

RDEPENDS_${PN}-staticdev = ""
RDEPENDS_${PN}-dev = ""
RDEPENDS_${PN}-dbg = ""
 
 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}
 
 }
 
 =====================

At local.conf add the library as

IMAGE_INSTALL_append = "simplelib-staticdev"

=====================

Again, thanks to Jussie for the help.

Regards!

--------------------------------------------
On Wed, 9/30/15, Jussi Kukkonen <jussi.kukkonen at intel.com> wrote:

 Subject: Re: [yocto] How to create and install a library in yocto -- Hello Library
 To: "Simon Castillo" <smcas_m at yahoo.com.mx>
 Cc: "Yocto Project" <yocto at yoctoproject.org>
 Date: Wednesday, September 30, 2015, 5:08 AM
 
 
 
 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 



More information about the yocto mailing list