In the last episode (Dec 20), mal content said:
> So, if I want to link to the shared library /usr/local/libxyz.so, I
> simply add '-lxyz' to my program link commands. But what if I want to
> link to the equivalent static library?

One method is to pass -Bstatic and -Bdynamic to the linker at
appropriate places:

  ${CC} ${CFLAGS} ${LDFLAGS} -o myprogram myprogram.o -Wl,-Bstatic -lxyz 
-Wl,-Bdynamic

That line will pull in libxyz.a while trying to use shared libraries
for everything else.  The drawbacks are: 1) if for some reason you want
to link that binary statically, you can't just add a LDFLAGS+=-static
to the Makefile; you have to remove all instances of -Wl,-Bdynamic; 
2) it's not a standard option (-Wl and -B are supported by Solaris and
GNU cc and ld, but not AIX), so it's no more portable than determining
the static library's filename and linking to it directly.
 
> I've not tried it, but I think this might work:
> 
>  /usr/local/lib/libxyz.so
>  /usr/local/lib-static/libxyz.a
> 
> That way, a program should be able to specify:
> 
>  cc -o myprog myprog.o -L/usr/local/lib -lxyz.so -L/usr/local/lib-static -labc
> 
> ...and get the dynamic 'libxyz.so' and the static 'libabc.a'.

-L adds paths to the end of the search list, so if there's a
/usr/local/lib/libabc.so, the linker will use that.

-- 
        Dan Nelson
        [EMAIL PROTECTED]
_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to