Ok a quick search on the Internet and I've found out that I probably miss some linker parameters such as:
-Wl,-soname,libmessages.so.0

Great, I have the feeling I learned something important today!

Thanks for the pointers!

Guy

On 11/21/2017 02:22 PM, Guy Morand wrote:
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 <g...@guy-morand.ch <mailto:g...@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@yoctoproject.org <mailto:yocto@yoctoproject.org>
    https://lists.yoctoproject.org/listinfo/yocto
    <https://lists.yoctoproject.org/listinfo/yocto>


--
_______________________________________________
yocto mailing list
yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/yocto

Reply via email to