[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