简体   繁体   中英

How to add a new library using Yocto

I am using Yocto and I just would like to integrate a new library in my project.

I create a new recipe name "libxerces" which contains a file "libxerces-3.1.1.bb". The bb file is quite simple because it is based on autotools :

DESCRIPTION = "Xerces-c is a validating xml parser written in C++"
HOMEPAGE = "http://xerces.apache.org/xerces-c/"
PRIORITY = "optional"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"

PR = "r1"

SRC_URI = "http://mirror.bit.edu.cn/apache//xerces/c/3/sources/xerces-c-${PV}.tar.gz"

s="${WORKDIR}/xerces-c-${PV}"

inherit autotools pkgconfig

SRC_URI[md5sum] = "6a8ec45d83c8cfb1584c5a5345cb51ae"
SRC_URI[sha256sum] = "a42785f71e0b91d5fd273831c87410ce60a73ccfdd207de1b805d26d44968736"

PACKAGES =+ "${PN}-utils"

FILES_${PN} = "${libdir}/*.so"
FILES_${PN}-utils = "${bindir}/*"
FILES_${PN}-staticdev = "${libdir}/*.a"*

BBCLASSEXTEND += "native"

I added "libxerces" to my bb image by using IMAGE_INSTALL += " libxerces". Then, I try to build my image thru bitbake my-image-test and eveything is done correctly but libxerces returns an error because it can not be installed. Howerver, I note that libxerces-dbg, libxerces-utils, libxerces-samples are visible under /tmp/work/deploy/ipk. I know that libxml2 is integrated by default into poky layer but I have to use xerces..

I solved the error

ERROR: Unable to install packages.
Collected errors:
 * opkg_install_cmd: Cannot install package libxerces.

overriding the PACKAGES variable.

In your case:

PACKAGES = "${PN} ${PN}-utils ${PN}-staticdev"

I think that is because the .so files goes to ${PN}-dev package by default.

I hope there is a smarter solution, but for now I fixed in this way.

If you are building a library and the library offers static linking, you can control which static library files (*.a files) get included in the built library.

The PACKAGES and FILES_* variables in the meta/conf/bitbake.conf configuration file define how files installed by the do_install task are packaged. By default, the PACKAGES variable includes ${PN}-staticdev, which represents all static library files.

FILES_${PN}-staticdev =""    # for static libs

FILES_${PN}-dev =""          # for dynamic libs

FILES_${PN}-dbg =""          # for debug options

you need to add above line to your recipe

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM