Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 13 Apr 2002 01:00:34 -0600 (MDT)
From:      "M. Warner Losh" <imp@village.org>
To:        roam@ringlet.net
Cc:        dima@sinp.msu.ru, freebsd-hackers@FreeBSD.ORG
Subject:   Re: dynamic libraries
Message-ID:  <20020413.010034.64370390.imp@village.org>
In-Reply-To: <20020413095747.E352@straylight.oblivion.bg>
References:  <20020413092834.A352@straylight.oblivion.bg> <20020413.004859.00083529.imp@village.org> <20020413095747.E352@straylight.oblivion.bg>

next in thread | previous in thread | raw e-mail | index | archive | help
In message: <20020413095747.E352@straylight.oblivion.bg>
            Peter Pentchev <roam@ringlet.net> writes:
: On Sat, Apr 13, 2002 at 12:48:59AM -0600, M. Warner Losh wrote:
: > In message: <20020413092834.A352@straylight.oblivion.bg>
: >             Peter Pentchev <roam@ringlet.net> writes:
: > : On Fri, Apr 12, 2002 at 10:09:16PM -0600, M. Warner Losh wrote:
: > : > In message: <Pine.BSF.4.43.0204121308470.4449-100000@BigKing.sinp.msu.ru>
: > : >             Dmitry Mottl <dima@sinp.msu.ru> writes:
: > : > : How can I link C program with different versions of the same library?
: > : > 
: > : > You can't.
: > : 
: > : Okay; what exactly is it that you cannot do - link a program against
: > : two versions of the same library simultaneously (I thought so), or
: > : link a program against a *specified* version of a library (what, I think,
: > : the original poster clarifies he wants to do, for no specific reason)?
: > 
: > You can't, generally, link against two different versions of the same
: > library.  The reason is that you get mutiply defined symbols because
: > it is very very very rare that two different versions of the same
: > library wouldn't have any symbols that overlap.
: 
: Well, actually, your 'full path' suggestion gave me an idea..
: 
: [roam@straylight:p6 ~/c/misc/foo]$ cc -o foo18 foo18.c /usr/lib/libncurses.so.5 /usr/lib/compat/libncurses.so.3
: [roam@straylight:p6 ~/c/misc/foo]$ ldd ./foo18
: ./foo18:
:         libncurses.so.5 => /usr/lib/libncurses.so.5 (0x28065000)
:         libncurses.so.3 => /usr/lib/compat/libncurses.so.3 (0x280a7000)
:         libc.so.4 => /usr/lib/libc.so.4 (0x280b8000)
:         libmytinfo.so.2 => /usr/lib/compat/libmytinfo.so.2 (0x28151000)
: [roam@straylight:p6 ~/c/misc/foo]$
: 
: Duplicate symbols are not a problem - AFAIK, symbols are resolved
: in the order the libraries were specified on the linker command line,
: and, consequently, in the order the dependencies are recorded into
: the resulting executable file.  So, if foo18 calls an ncurses.5 routine,
: it will be invoked from ncurses.5; if foo18 calls a routine that is
: not present in ncurses.5, it will be invoked from ncurses.3.
: 
: So it is actually possible; not that I have ANY idea what the point
: would be..

Ah, this just hides the problem of incompatible interfaces :-(.
that's why the libraries have different version numbers: they have a
different API.

Warner

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




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