What drives RPM Provides for shared libraries?

Adam Williamson awilliam at redhat.com
Wed Dec 22 11:15:26 UTC 2010


On Tue, 2010-12-21 at 23:28 -0800, Nicholas Miell wrote:
> On 12/21/2010 09:43 PM, Nicholas Miell wrote:
> > 
> > ld.so isn't happy with that (lookups aren't based on filenames, so
> > symlinks won't do anything and it will never find the library).
> > 
> > You need to create an empty shared library with the
> > libmysqlclient_r.so.16 SONAME that has a DT_AUXILIARY entry for
> > libmysqlclient.so.16.
> 
> In theory, the following should produce a usable library:
> 
> eu-readelf -s /usr/lib64/mysql/libmysqlclient_r.so.16.0.0 |
> ./mysql_filter.gawk > hack.c
> gcc $(rpm --eval %optflags) -fPIC -shared -fno-toplevel-reorder
> -Wl,-soname,libmysqlclient_r.so.16 -Wl,--filter,libmysqlclient.so.16
> hack.c -o libmysqlclient_r.so.16
> 
> but in practice, it gives me:
> 
> /usr/bin/ld: libmysqlclient_r.so.16: version node not found for symbol
> sf_malloc_mem_limit@@libmysqlclient_16
> /usr/bin/ld: failed to set dynamic section sizes: Bad value
> collect2: ld returned 1 exit status
> 
> and nobody on the internet has any idea what that error means.

I cargo-culted this into the libva spec, at one point, from Gwenole
Beauchesne's Debian spec:

echo ".text"|gcc -xassembler - -o debian/tmp/usr/lib/libva.so.0.29.0 -shared -Wl,-soname,libva.so.0 -Ldebian/tmp/usr/lib -lva-x11

No idea how it actually works, but I believe it effectively does what
you'd be trying to do if you did 'ln -s libva.so.0.29.0 libva.so.0' .

so maybe something like it could be used in this case. If it eats your
cat, don't blame me =)
-- 
Adam Williamson
Fedora QA Community Monkey
IRC: adamw | Fedora Talk: adamwill AT fedoraproject DOT org
http://www.happyassassin.net



More information about the devel mailing list