[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: autoconf linking with shared object
From: |
Ralf Wildenhues |
Subject: |
Re: autoconf linking with shared object |
Date: |
Wed, 29 Mar 2006 18:42:57 +0200 |
User-agent: |
Mutt/1.5.11 |
Hi Braden,
* Braden McDaniel wrote on Wed, Mar 29, 2006 at 06:18:02PM CEST:
> On Wed, 2006-03-29 at 10:41 +0200, Ralf Wildenhues wrote:
> > * Braden McDaniel wrote on Wed, Mar 29, 2006 at 10:32:37AM CEST:
> > >
[ -l* in *_LDFLAGS ]
> > That's very likely because you rarely do static linking.
>
> While as a matter of convenience during development I build dynamic
> libraries much more often than static ones, I do ensure my package works
> in the static case. I do use libtool, so perhaps it is insulating me
> from problems.
Nope, libtool leaves you out in the cold there. But it's really
Automake that dictates the order of the Makefile macros in the link
command line.
> You seem to be saying "make sure all your -l flags are in the right
> order", which is a concept (I think) I understand. But I believe I've
> been doing that while putting the -l flags in *_LDFLAGS just fine.
So you have the order inside your library flags under control. That is
one important part for static linking.
> Are you saying that use of *_LDFLAGS is somehow fundamentally
> incompatible with this goal?
Well, Automake generates something similar to this (abridged):
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
[...]
prog$(EXEEXT): $(prog_OBJECTS) $(prog_DEPENDENCIES)
@rm -f prog$(EXEEXT)
$(LINK) $(prog_OBJECTS) $(prog_LDADD) $(LIBS)
Now look at this example:
cat >m.c <<\EOF
#include <stdio.h>
#include <math.h>
int main()
{
double x = 0.;
printf("%g\n", sin(x));
return 0;
}
EOF
gcc -c m.c
gcc -static -lm -o m m.o
| m.o(.text+0x1f): In function `main':
| : undefined reference to `sin'
| collect2: ld returned 1 exit status
gcc -static -o m m.o -lm; echo $?
| 0
So it's a good idea to put the library flags after all the objects.
(BTW, the variable keeps gcc from optimizing the sin call away.)
Cheers,
Ralf
- autoconf linking with shared object, Matt Kowalczyk, 2006/03/27
- Re: autoconf linking with shared object, Ralf Wildenhues, 2006/03/28
- Re: autoconf linking with shared object, Brian Dessent, 2006/03/28
- Re: autoconf linking with shared object, Matt Kowalczyk, 2006/03/28
- Re: autoconf linking with shared object, Ralf Wildenhues, 2006/03/29
- Re: autoconf linking with shared object, Braden McDaniel, 2006/03/29
- Re: autoconf linking with shared object, Ralf Wildenhues, 2006/03/29
- Re: autoconf linking with shared object, Andreas Schwab, 2006/03/29
- Re: autoconf linking with shared object, Braden McDaniel, 2006/03/29
- Re: autoconf linking with shared object,
Ralf Wildenhues <=