An application I work on has been calling libtool (through automake)
with linker directives on the libtool line, around many of the libraries
specified, like so (apologies if this wraps strangely, it's all one
line):

/bin/sh ../libtool --mode=link gcc  -g -O2 -Wall -Wunused
-Wmissing-prototypes -Wmissing-declarations   -o installer
installer-distro.o installer-page.o installer-page-install.o
installer-page-deps.o installer-page-finish.o installer-page-gdm.o
installer-page-method.o installer-page-mirror.o
installer-page-more-deps.o installer-page-proxy.o
installer-page-select.o installer-page-start.o installer-state-machine.o
installer-ui.o ../libredcarpet/src/libredcarpet.a
../libgnometransfer/src/libgnometransfer.a -Wl,-Bstatic  -rdynamic
-L/usr/lib -L/usr/X11R6/lib -L/usr/lib/lib -lgtkhtml -lgal -lgnomeprint
-lglade-gnome -lglade -lxml -lz -lgnomeui -lart_lgpl  -lSM -lICE -lgtk
-lgdk -lgmodule -lXi -lXext -lX11 -lgnome -lgnomesupport -lesd
-laudiofile -lm -ldb1 -lglib -ldl -lgnet -rdynamic -lgmodule -lglib -ldl
/home/itp/gdk-pixbuf-0.11.0//gdk-pixbuf/.libs/libgdk_pixbuf.a -lgtk
-lgdk -rdynamic -lgmodule -lglib -ldl -lXi -lXext -lX11 -lm
/home/itp/gdk-pixbuf-0.11.0//gdk-pixbuf/.libs/libgnomecanvaspixbuf.a
/home/itp/imlib-1.9.10//gdk_imlib/.libs/libgdk_imlib.a -ljpeg -ltiff
-lungif -lpng -lz -lm -lgtk -lgdk -rdynamic -lgmodule -lglib -ldl -lXi
-lXext -lX11 -lm -luuid -lcrypt -lz -lutil -Wl,-Bdynamic

With libtool 1.3.x, this resulted in the following call to gcc:

gcc -g -O2 -Wall -Wunused -Wmissing-prototypes -Wmissing-declarations -o
installer installer-distro.o installer-page.o installer-page-install.o
installer-page-deps.o installer-page-finish.o installer-page-gdm.o
installer-page-method.o installer-page-mirror.o
installer-page-more-deps.o installer-page-proxy.o
installer-page-select.o installer-page-start.o installer-state-machine.o
installer-ui.o ../libredcarpet/src/libredcarpet.a
../libgnometransfer/src/libgnometransfer.a -Wl,-Bstatic -rdynamic
-L/usr/lib -L/usr/X11R6/lib -L/usr/lib/lib -lgtkhtml -lgal -lgnomeprint
-lglade-gnome -lglade -lxml -lz -lgnomeui -lart_lgpl -lSM -lICE -lgtk
-lgdk -lgmodule -lXi -lXext -lX11 -lgnome -lgnomesupport -lesd
-laudiofile -lm -ldb1 -lglib -ldl -lgnet -rdynamic -lgmodule -lglib -ldl
/home/itp/gdk-pixbuf-0.11.0/gdk-pixbuf/.libs/libgdk_pixbuf.a -lgtk -lgdk
-rdynamic -lgmodule -lglib -ldl -lXi -lXext -lX11 -lm
/home/itp/gdk-pixbuf-0.11.0/gdk-pixbuf/.libs/libgnomecanvaspixbuf.a
/home/itp/imlib-1.9.10/gdk_imlib/.libs/libgdk_imlib.a -ljpeg -ltiff
-lungif -lpng -lz -lm -lgtk -lgdk -rdynamic -lgmodule -lglib -ldl -lXi
-lXext -lX11 -lm -luuid -lcrypt -lz -lutil -Wl,-Bdynamic

Unfortunately, with libtool 1.4.x, I get this instead (after a much,
much longer time):

gcc -g -O2 -Wall -Wunused -Wmissing-prototypes -Wmissing-declarations -o
installer installer-distro.o installer-page.o installer-page-install.o
installer-page-deps.o installer-page-finish.o installer-page-gdm.o
installer-page-method.o installer-page-mirror.o
installer-page-more-deps.o installer-page-proxy.o
installer-page-select.o installer-page-start.o installer-state-machine.o
installer-ui.o -Wl,-Bstatic -rdynamic -rdynamic -rdynamic -rdynamic
-Wl,-Bdynamic  ../libredcarpet/src/libredcarpet.a
../libgnometransfer/src/libgnometransfer.a -L/usr/lib -L/usr/X11R6/lib
-L/usr/lib/lib /usr/lib/libgtkhtml.so /usr/lib/libgnomecanvaspixbuf.so
/usr/lib/libbonobo.so /usr/lib/liboaf.so /usr/lib/libORBitCosNaming.so
/usr/lib/libORBit.so /usr/lib/libIIOP.so /usr/lib/libORBitutil.so
/usr/lib/libbonobox.so -lz -lXi -lXext -lX11 -lm -ldl /usr/lib/libgal.so
/usr/lib/libgnomeprint.so /usr/lib/libgdk_pixbuf.so -ldl -lXi -lXext
-lX11 -lm -lz /usr/lib/libglade-gnome.so -lXi -lXext -lX11 -lm -ldl -lz
/usr/lib/libglade.so -ldl -lXi -lXext -lX11 -lm -lz /usr/lib/libxml.so
-lz -lz -lz /usr/lib/libgnomeui.so -lm -lm -ldl /usr/lib/libgdk_imlib.so
-ldl -lXi -lXext -lX11 -lm -ldl -lXi -lXext -lX11 -lm -lz -lm
/usr/lib/libart_lgpl.so -lSM -lICE -ldl -lXi -lXext -lX11 -lm -ldl -lXi
-lXext -lX11 -lm -ldl -lXi -lXext -lX11 /usr/lib/libgnome.so -lm -ldl
-lz -lm /usr/lib/libgnomesupport.so -lz -lm /usr/lib/libesd.so -lm -lm
/usr/lib/libaudiofile.so -lm -lm -lm -ldb1 -ldl /usr/lib/libgnet.so
-lresolv -lnsl -ldl -ldl
/home/itp/gdk-pixbuf-0.11.0//gdk-pixbuf/.libs/libgdk_pixbuf.a -ldl -lXi
-lXext -lX11 -lm -ldl -lXi -lXext -lX11 -lm -ldl -ldl -lXi -lXext -lX11
-lm /home/itp/gdk-pixbuf-0.11.0//gdk-pixbuf/.libs/libgnomecanvaspixbuf.a
/home/itp/imlib-1.9.10//gdk_imlib/.libs/libgdk_imlib.a
/usr/lib/libjpeg.so -ltiff /usr/lib/libungif.so -lX11 -lpng -lz -lm
/usr/lib/libgtk.so -ldl -lXi -lXext -lX11 -lm /usr/lib/libgdk.so -ldl
-lXi -lXext -lX11 -lm /usr/lib/libgmodule.so -ldl /usr/lib/libglib.so
-ldl -lXi -lXext -lX11 -lm -luuid -lcrypt -lz -lutil

Conspicuously missing are the linker directives to be passed to gcc,
namely -Wl,-Bstatic and -Wl,-Bdynamic.  I do this to produce a binary
that is linked statically except for libc and the dynamic linker.

libtool --help --mode=link offers the following:

All other options (arguments beginning with `-') are ignored.

As -W isn't an option libtool claims to recognize in link mode, and as
in the past ignored has meant passed on, I'm confused why libtool has
stripped these directives out.  Obviously this produces dramatically
different results.

Is this a bug in libtool 1.4.x, or an undocumented change in behaviour? 
If so, is there some other way to accomplish the same goal?

--
Ian Peters
[EMAIL PROTECTED]


_______________________________________________
Libtool mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/libtool

Reply via email to