On 2017-02-27 21:11, Max Krummenacher wrote:
Hi

Am Montag, den 27.02.2017, 15:03 +0100 schrieb Gary Thomas:
I trying to create a package am335x-pru-support which creates a
shared library used by another package pru-examples.  The library
files installed with am335x-pru-support are (from <BUILD>/image)
-rwxr-xr-x 4 gthomas gthomas 17074 Feb 27 13:40 usr/lib/libprussdrv.a
lrwxrwxrwx 1 gthomas gthomas    16 Feb 27 13:40 usr/lib/libprussdrv.so -> 
libprussdrv.so.1
lrwxrwxrwx 1 gthomas gthomas    18 Feb 27 13:40 usr/lib/libprussdrv.so.1 -> 
libprussdrv.so.1.0
-rwxr-xr-x 1 gthomas gthomas 22092 Feb 27 13:40 usr/lib/libprussdrv.so.1.0
-rw-r--r-- 4 gthomas gthomas 8074 Feb 27 13:40 usr/include/pruss/prussdrv.h
-rw-r--r-- 4 gthomas gthomas 4286 Feb 27 13:40 
usr/include/pruss/pruss_intc_mapping.h

These files are split by the packager as:
gthomas@europa:packages-split$ find am335x-pru-support | sort
am335x-pru-support
am335x-pru-support/usr
am335x-pru-support/usr/lib
am335x-pru-support/usr/lib/libprussdrv.so.1
am335x-pru-support/usr/lib/libprussdrv.so.1.0
gthomas@europa:packages-split$ find am335x-pru-support-dev | sort
am335x-pru-support-dev
am335x-pru-support-dev/usr
am335x-pru-support-dev/usr/include
am335x-pru-support-dev/usr/include/pruss
am335x-pru-support-dev/usr/include/pruss/prussdrv.h
am335x-pru-support-dev/usr/include/pruss/pruss_intc_mapping.h
am335x-pru-support-dev/usr/lib
am335x-pru-support-dev/usr/lib/libprussdrv.so

These files get staged correctly to pru-examples recipe-specific-sysroot
and I can build and link against them, using DEPENDS="am335x-pru-support".
The problem is that when my build (target recipe) uses
   $(CC) my_target_program.c $(LDFLAGS) -lprussdrv
it gets satisfied by /usr/lib/libprussdrv.so and not /usr/lib/libprussdrv.so.1
This in turn appears to keep the pru-examples package from having
a runtime dependency against the am335x-pru-support package and the
necessary library file does not end up on my target.

I've tried to work through this, following many recipes as examples,
e.g. meta/recipes-multimedia/libogg (pattern for am335x-pru-support)
and meta/recipes-multimedia/flac (pattern for pru-examples).  The
libogg/flac combo works correctly, mine does not :-(

Any pointers on what I might be doing wrong?  I'm so close to getting
this stuff going, it's just the packaging that's going to claim the
last hairs from my head...

When linking a shared object file you have to pass the linker a soname which 
adds compatible version
information into the share object file.
Have a look here:
http://git.yoctoproject.org/cgit/cgit.cgi/meta-fsl-arm/commit/recipes-bsp?id=7ff327a4e3e8e19d1e3f848
865b6b27ba9f6250b
http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html


Alternatively you can drop the libprussdrv.so.1 and libprussdrv.so.1.0, and 
force with FILES... the
libprussdrv.so into the not -dev package.
Probably you would also want to INSANE_SKIP_${PN} = "dev-so".

Perfect, that worked a treat!

Thanks

--
------------------------------------------------------------
Gary Thomas                 |  Consulting for the
MLB Associates              |    Embedded world
------------------------------------------------------------
--
_______________________________________________
yocto mailing list
[email protected]
https://lists.yoctoproject.org/listinfo/yocto

Reply via email to