[libvirt] [PATCH] Put libraries in $LIBS, not $LDFLAGS, during configure tests.
nix at esperi.org.uk
Wed Nov 25 22:26:22 UTC 2009
On 25 Nov 2009, Daniel P. Berrange spake thusly:
> On Mon, Nov 23, 2009 at 09:28:24PM +0000, Nix wrote:
>> If libraries go in $LDFLAGS while AC_CHECK_LIBbing, they'll end up in
>> front of the object file name, which rarely works well. They belong
>> in $LIBS.
> What platforms / scenarios show this problem ? Empirically it has
> been working fine on our commonly tested platforms, so it'll be
> important to know where to look/test for this problem.
Autoconf has always sorted $LDFLAGS before object files. When
-Wl,--as-needed is turned on by default (as a number of distros do),
such libraries are silently dropped because nothing needs symbols from
them at that point in the link, just as if they were static
libraries. Without -Wl,--as-needed, every single library named in the
link is added to DT_NEEDED, so this works.
Nonetheless, it is plainly obvious to any Unix hand that
cc -L/usr/lib -lfoo -o test thing-that-uses-foo.o
is less likely to work than
cc -L/usr/lib -o test thing-that-uses-foo.o -lfoo
and if you put libraries in LDFLAGS, the former's often what you get.
It'll probably fail for you, too, if HAL (say) is statically linked,
because the -Wl,--as-needed behaviour for shared libraries is exactly
how static libraries have always worked.
The GNU Autoconf manual has long stated
-- Variable: LDFLAGS
Don't use this variable to pass library names (`-l') to the
linker; use `LIBS' instead.
(I'm surprised that no Gentooers, for instance, have reported this
already. A *lot* of distros turn on -Wl,--as-needed by default these
days, often by modifying the built-in GCC specs and providing a fallback
specs file that specifies -Wl,--no-as-needed for those very rare things,
such as glibc's testsuite, that actually *require* linkage with shared
libraries from which no symbols are required.)
More information about the libvir-list