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]"