Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 20 Dec 2006 11:01:50 +0000
From:      "mal content" <artifact.one@googlemail.com>
To:        freebsd-hackers@freebsd.org
Subject:   Linking static libraries with '-l'
Message-ID:  <8e96a0b90612200301l467b2688j157071f205685e7@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
Hi.

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?

The GCC manual says:

       -static
              On  systems  that support dynamic linking, this prevents linking
              with the shared libraries.  On other systems, this option has no
              effect.

This is unsuitable as it will obviously compile in EVERYTHING statically,
including the system libc.

How come there's no (obvious) portable way to link to static libraries? The
 '-l' method is "portable" because the Makefile doesn't need to know the suffix
used for shared libraries on any particular platform (so on FreeBSD, dylib on
Darwin, sl on HP-UX, dll on Windows, and most likely more). However, to link
against static libs, the only option appears to be to do:

  cc -o myprog myprog.o /usr/local/libxyz.a

The static library must be specified by full path, using the '.a'
suffix - obviously
contains potential portability problems in the event of a platform not using
the '.a' suffix (although I've not actually seen any to date) -
because otherwise
the existence of libxyz.so will cause a program that uses '-l' to link against
the dynamic library instead of the static.

Is there a better way?

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'.

Any thoughts?
MC



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