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