Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 21 Jul 2014 15:36:57 +0200
From:      Tijl Coosemans <tijl@FreeBSD.org>
To:        John Marino <freebsd.contact@marino.st>
Cc:        svn-ports-head@freebsd.org, kwm@FreeBSD.org, Baptiste Daroussin <bapt@FreeBSD.org>, svn-ports-all@freebsd.org, marino@freebsd.org, ports-committers@freebsd.org
Subject:   Re: svn commit: r362304 - head/x11-toolkits/pango
Message-ID:  <20140721153657.17c64594@kalimero.tijl.coosemans.org>
In-Reply-To: <53CD0F04.4040709@marino.st>
References:  <201407200815.s6K8FG8b003096@svn.freebsd.org> <20140720132259.156d687e@kalimero.tijl.coosemans.org> <53CBA770.2010409@marino.st> <20140720113124.GD26778@ivaldir.etoilebsd.net> <20140720165256.1f4d5d07@kalimero.tijl.coosemans.org> <53CBF2D7.4070005@marino.st> <20140721013342.6c17ecdc@kalimero.tijl.coosemans.org> <53CCABFA.7090202@marino.st> <20140721121214.1d1f3ef5@kalimero.tijl.coosemans.org> <53CCF19B.3060906@marino.st> <20140721132621.64ef394c@kalimero.tijl.coosemans.org> <53CD047B.7080104@marino.st> <20140721144356.72c4e5c2@kalimero.tijl.coosemans.org> <53CD0F04.4040709@marino.st>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, 21 Jul 2014 15:00:52 +0200 John Marino wrote:
> On 7/21/2014 14:43, Tijl Coosemans wrote:
>> On Mon, 21 Jul 2014 14:15:55 +0200 John Marino wrote:
>>> On 7/21/2014 13:26, Tijl Coosemans wrote:
>>>> On Mon, 21 Jul 2014 12:55:23 +0200 John Marino wrote:
>>>>> Everything that uses a pango function that has a libm symbol must also
>>>>> link with libm.
>>>>
>>>> This is a completely false statement.  If X links to Y and Y uses Z
>>>> symbols, you do not have to link X with Z.  Y links with Z and that is
>>>> enough.  Otherwise X would have to link with its entire dependency
>>>> tree.
>>>
>>> If the linker doesn't follow Y's link to Z, how is it supposed to
>>> resolve Z references?
>> 
>> If X doesn't contain Z references the linker doesn't have to resolve
>> Z references.
>> 
>> If X does contain Z references then explicit linking requires that you
>> explicitly link X with -lZ and that you cannot rely on -lY to imply -lZ.
> 
> This seems to be the heart of our disagreement.
> I am saying X can pull in a function of Y that contains a symbol of Z.
> In that case, there's no reference of Z in X, but when linking X it
> still needs -lZ.

Let's work out an example:

-- X.c --
void funcY( void );
int main( void ) {
	funcY();
	return( 0 );
}
---------

-- Y.c --
void funcZ( void );
void funcY( void ) {
	funcZ();
}
---------

-- Z.c --
#include <stdio.h>
void funcZ( void ) {
	( void ) puts( "Hello world" );
}
---------

Create libZ.so:
% cc -shared -o libZ.so Z.c

Create libY.so linking it with libZ:
% cc -shared -o libY.so Y.c -Wl,-rpath,. -L. -lZ

Create X linking it with libY, but not libZ:
% cc -o X X.c -Wl,-rpath,. -L. -lY

Run ./X:
% ./X
Hello world


Now, what do you get?



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