[yocto] Makefile library and debian naming
Guy Morand
guy at guy-morand.ch
Tue Nov 21 05:22:49 PST 2017
Ross,
Thanks for your quick reply!
No, I don't inherit debian and wish I could leave the so file as is, it
was just a quick and dirty hack to compile my image.
> Another indication of this is the lack of renaming. Look at
> the makefile, specifically the specified soname.
The Makefile is written by myself. The library is built as follow:
$(SHARED_OUT_DIR)/%.o: %.c
$(CC) $(CFLAGS) -fPIC -c -o $@ $<
$(SHARED_OUT_DIR)/$(SHARED_LIB_NAME): $(SHARED_OBJS)
$(CC) -shared $(LDFLAGS) $(SHARED_OBJS) -o $@
What do you mean with "lack of renaming", do you have some pointers?
Something with LDFLAGS? What is the specified "soname"?
Guy
On 11/21/2017 02:13 PM, Burton, Ross wrote:
> You don't need to inherit debian in a recipe, that is meant to be a
> distro-level inherit (and is inherited out of the box).
>
> Deleting the .so breaks non-static linking as that is the file which is
> used to link against, so don't delete it. It should be in the -dev package.
>
> The QA error is probably because your library is built wrong in the
> makefile. Another indication of this is the lack of renaming. Look at
> the makefile, specifically the specified soname.
>
> Ross
>
> On 21 November 2017 at 13:00, Guy Morand <guy at guy-morand.ch
> <mailto:guy at guy-morand.ch>> wrote:
>
> Hallo Yocto developpers!
>
> I'm trying to build a Makefile based library. The recipe looks like
> this:
> ---[recipe mesages.bb <http://mesages.bb>]---
> # SNIP recipe header
>
> do_compile() {
> oe_runmake LDFLAGS="${LDFLAGS}" shared-lib
> oe_runmake LDFLAGS="${LDFLAGS}" static-lib
> }
>
> do_install() {
> oe_runmake install DESTDIR=${D}${prefix}
>
> # Fix pkg-config
> sed -i 's,${D},,g' ${D}/usr/lib/pkgconfig/messages.pc
>
> # FIXME: Try to make a debian package libmessages instead
> # This avoids errors when installing an app linking with this
> library!
> rm ${D}/${libdir}/lib${PN}.so
> }
> ---[/recipe mesages.bb <http://mesages.bb>]---
>
> The resulted image in WORKDIR looks like this:
> ---[WORKDIR/image]---
> image/usr/lib/libmessages.so.0.3.0
> image/usr/lib/libmessages.so.0
> image/usr/lib/libmessages.a
> image/usr/lib/pkgconfig/messages.pc
> image/usr/include/messages/<all my headers>
> ---[/WORKDIR/image]---
>
> The generated ipk packages are:
> ---[ipks]---
> messages-dev_git.ipk
> messages_git.ipk
> messages-staticdev_git.ipk
> messages-dbg_git.ipk
> ---[/ipks]---
>
> The problem is that an application compiled with this library links
> against the static library. If I don't remove the .so file from the
> recipe, my application fails installing:
> ---[bitbake error]---
> ERROR: myApp do_package_qa: QA Issue: /usr/bin/myApp contained in
> package myApp requires libmessages.so, but no providers found in
> RDEPENDS_myApp? [file-rdeps]
> ---[/bitbake error]---
>
> Probably because the .so gets packed in the messages-dev.ipk ...
>
> The strange thing is that I would expect a generated ipk with debian
> naming such as:
> libmessages_git.ipk
> libmessages-dbg_git.ipk
> libmessages-dev_git.ipk
> libmessages-staticdev_git.ipk
>
>
> I have other libraries based on cmake and everything works as expected!
>
> Despite the recipe already inherits "debian", explicitly inheriting
> this class doesn't help.
>
> What am I doing wrong?
>
> Guy Morand
> --
> _______________________________________________
> yocto mailing list
> yocto at yoctoproject.org <mailto:yocto at yoctoproject.org>
> https://lists.yoctoproject.org/listinfo/yocto
> <https://lists.yoctoproject.org/listinfo/yocto>
>
>
More information about the yocto
mailing list