Forcing symbol resolution in lib rather than bin
keramida at ceid.upatras.gr
Fri Aug 19 19:48:56 GMT 2005
On 2005-08-19 20:13, Jonathon McKitrick <jcm at FreeBSD-uk.eu.org> wrote:
> I have a binary that links to a shared object library. That .so calls a
> routine in an archive library (.a). When I link the main app with -lar-a it
> works fine, even though the function is actually called in the .so. But when
> I link the .so with -lar-a, the linker doesn't resolve the symbol!
> So, here's the call graph:
> bin --> shared --> archive
> If I link bin to shared and archive, it works. But if I link shared to
> archive, and then bin to shared, it doesn't, even though the shared object
> calls the archived function, rather than bin.
> What basic link concept am I missing here?
Strange. How are you building these libraries and the program?
I've uploaded a minimal test at:
This contains three parts:
libfoo/ which defines libfoo_init()
and builds as a non-shared libfoo.a
libbar/ which defines libbar_init() and
foobar/ a program that links with libbar.so
and calls only libbar_init()
Here's the output of ldd on the foobar binary and the output of running
the foobar program:
# flame:/tmp/jcm-lib/foobar$ LD_LIBRARY_PATH=`pwd`/../libbar ldd foobar
# libbar.so.1 => /tmp/jcm-lib/foobar/../libbar/libbar.so.1 (0x80062a000)
# libc.so.6 => /lib/libc.so.6 (0x80072b000)
# flame:/tmp/jcm-lib/foobar$ LD_LIBRARY_PATH=`pwd`/../libbar ./foobar
# libfoo initialized at 0x80062a8a0
# libbar initialized at 0x4004e4
More information about the freebsd-questions