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

Simon Castillo smcas_m at yahoo.com.mx
Tue Sep 29 18:28:00 PDT 2015


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.
=============
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.
===============

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.

Thanks




More information about the yocto mailing list