Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 19 Aug 2005 22:47:48 +0300
From:      Giorgos Keramidas <keramida@ceid.upatras.gr>
To:        Jonathon McKitrick <jcm@FreeBSD-uk.eu.org>
Cc:        freebsd-questions@freebsd.org
Subject:   Re: Forcing symbol resolution in lib rather than bin
Message-ID:  <20050819194748.GA7138@flame.pc>
In-Reply-To: <20050819191335.GA76538@dogma.freebsd-uk.eu.org>
References:  <20050819191335.GA76538@dogma.freebsd-uk.eu.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On 2005-08-19 20:13, Jonathon McKitrick <jcm@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:

	http://people.freebsd.org/~keramida/files/jcm-lib.tar.gz

This contains three parts:

	libfoo/			which defines libfoo_init()
				and builds as a non-shared libfoo.a

	libbar/			which defines libbar_init() and
				calls libfoo_init()

	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
# 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
# flame:/tmp/jcm-lib/foobar$




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20050819194748.GA7138>