Date: Wed, 20 Dec 2006 09:37:01 -0600 From: Dan Nelson <dnelson@allantgroup.com> To: mal content <artifact.one@googlemail.com> Cc: freebsd-hackers@freebsd.org Subject: Re: Linking static libraries with '-l' Message-ID: <20061220153700.GD41207@dan.emsphone.com> In-Reply-To: <8e96a0b90612200301l467b2688j157071f205685e7@mail.gmail.com> References: <8e96a0b90612200301l467b2688j157071f205685e7@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
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 dnelson@allantgroup.com
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20061220153700.GD41207>