-Bstatic & -shared problems / example

Franz Sirl Franz.Sirl-kernel@lauterbach.com
Tue Apr 16 05:22:00 GMT 2002


At 14:12 16.04.2002, bert hubert wrote:
>On Tue, Apr 16, 2002 at 02:01:54PM +0200, Franz Sirl wrote:
>
> > Why should the linker extract anything at all from these libraries? You
> > listed them in front of your object file! Change the order of your command
> > line.
>
>That commandline works fine - you misunderstand me. But the commandline is
>indeed duplicate.
>
>The reduced question is, why does this work fine:
>
>$ ar x /opt/postgresql/lib/libpq++.a $(ar t /opt/postgresql/lib/libpq++.a)
>$ ar x /opt/postgresql/lib/libpq.a $(ar t /opt/postgresql/lib/libpq.a)
>$ g++ -L/opt/postgresql/lib -lssl -lcrypt
>  -lcrypto -Wl,-soname -Wl,libgpsqlbackend.so.0 -shared  -o
>  libgpgsqlbackend.so *.o
>
>Any why doesn't this:
>
>$ g++ -L/opt/postgresql/lib -lssl -lcrypt -lcrypto  -Wl,-Bstatic -lpq++ -lpq
>  -Wl,-Bdynamic -Wl,-soname -Wl,libgpsqlbackend.so.0 -shared -o
>  libgpgsqlbackend.so pgsqlbackend.o
>
>Because as far as I can see, these should be identical. The difference:

archive != object file for the linker. Again, you have misordered your 
command line, there is no object file listed in front of the libraries, so 
no need for the linker to extract anything from the libraries cause there 
is no consumer (yet). Try:

$ g++ pgsqlbackend.o -L/opt/postgresql/lib -lssl -lcrypt 
-lcrypto  -Wl,-Bstatic -lpq++ -lpq -Wl,-Bdynamic -Wl,-soname 
-Wl,libgpsqlbackend.so.0 -shared -o libgpgsqlbackend.so

BTW, this is quite off-topic here, these are linker basics that have 
nothing to do with binutils in particular.

Franz.



More information about the Binutils mailing list