[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: how to use circular dependencies
From: |
tom fogal |
Subject: |
Re: how to use circular dependencies |
Date: |
Mon, 11 Jul 2005 16:24:34 -0400 |
<address@hidden>Ralf Wildenhues writes:
>Hi Tom,
>
>* tom fogal wrote on Fri, Jul 08, 2005 at 08:14:51PM CEST:
>> Hi all, I'm trying to get libtool to link a program that depends on a
>> circular list of static (libtool) libraries.
>>
>> I'm using a command line like:
>>
>> ../../libtool --mode=link --preserve-dup-deps g77 -Wall -I../include
>> -O0 -o partrj -static *.o ../ui/libParTrjUI.la ../models/libSPPModels.la
>> ../share/libSPPShare.la ../models/libSPPModels.la ../grid/libSPPgrid.la
>> ../fields/libSPPFields.la ../share/libSPPShare.la
>> ../menus/libParTrjMenu.la ../strings/src/libSPPStrings.la
>> ../hash/libHash.la ../dbg/libSPPdbg.la ../t89files/libSPPt89.la
>>
>> unfortunately this ends up not working because libtool is
>> removing/reordering some of the libraries:
>
>I presume this is because the libraries have interdependencies listed in
>the respective .la files.
erm.. hopefully? This is all an autoconf/automake generated thing; it
appears I was doing what are called 'libtool convenience libraries'. I
simply pulled out + posted the line that caused problems.
>> g77 -Wall -I../include -O0 -o partrj <bunch of .o files>
>> ../ui/.libs/libParTrjUI.a ../models/.libs/libSPPModels.a
>> ../grid/.libs/libSPPgrid.a ../fields/.libs/libSPPFields.a
>> ../share/.libs/libSPPShare.a ../menus/.libs/libParTrjMenu.a
>> ../strings/src/.libs/libSPPStrings.a ../hash/.libs/libHash.a
>> ../dbg/.libs/libSPPdbg.a ../t89files/.libs/libSPPt89.a
>>
>> "--preserve-dup-deps" doesn't seem to have an effect. I also tried
>> remaking the command line using -L and -l options instead of explicitly
>> specifying the .la file, with the same effect of libtool stripping out
>> libraries from the link line.
>
>Hmm. Is the package that contains these libraries freely available
>online? If not: could you show the corresponding link lines for the
unfortunately, no.
>libraries? (Either the Makefile.am snippets, or whatever `make' makes
>of it as libtool command line; plus libtool's output.)
Sure.
/bin/sh ../../libtool --mode=link g77 -Wall -I../include/
-pedantic-errors -fno-f90 -fno-automatic -finit-local-zero
-fugly-complex -fugly-init -Wno-globals -g -O2 -o libSPPdbg.la
dbg_basics.lo dbg_bevals.lo dbg_constants.lo dbg_harpol.lo
dbg_interp.lo dbg_position.lo dbg_ivector.lo dbg_vector.lo
dbg_vlstrn.lo
ar cru .libs/libSPPdbg.a .libs/dbg_basics.o .libs/dbg_bevals.o
.libs/dbg_constants.o .libs/dbg_harpol.o .libs/dbg_interp.o
.libs/dbg_position.o .libs/dbg_ivector.o .libs/dbg_vector.o
.libs/dbg_vlstrn.o
ranlib .libs/libSPPdbg.a
creating libSPPdbg.la
(cd .libs && rm -f libSPPdbg.la && ln -s ../libSPPdbg.la libSPPdbg.la)
You'll notice that the above has slightly different flags than what you
would guess based on earlier lines I've included. Since I reported
this, I've determined we don't really /need/ libtool at all, so I
removed it from the project. After that I heard the project was missing
some flags that should be there, from the source code author, so I've
added them in.
The line I just gave above is from me changing one of the Makefile.ams
to use libtool again.
The relevant Makefile.am snippets are:
# old way -- using libtool
noinst_LTLIBRARIES=libSPPdbg.la
libSPPdbg_la_SOURCES= \
dbg_basics.f \
dbg_bevals.f \
dbg_constants.f \
dbg_harpol.f \
dbg_interp.f \
dbg_position.f \
dbg_ivector.f \
dbg_vector.f \
dbg_vlstrn.f
address@hidden@lib/libSPPstrings.la
The "new way" is the same but s/LTLIBRARIES/LIBRARIES/ and s/la/a/. All
the libaries are (were) built in this same manner.
>> I found a post on libtool-patches from 2002, where someone else had run
>> into this issue. They expected linker flags of -Wl,"-(" <libs> -Wl,"-)"
>> to fix it. I changed my link line above to use these linker flags in
>> the libtool command line, but I still get the same error. It appears as
>> if the patch was never applied (why?)?
>
>Are you talking about this?
>http://lists.gnu.org/archive/html/libtool-patches/2002-09/msg00007.html
Ooops, sorry! I had thought I included the link; mea culpa. Thanks for
doing the research again for me =)
>I can only guess it was not applied because it's a hack..
=(
>> I am using libtool version '1.5.18 (1.1220.2.246 2005/05/16 10:00:18'.
>>
>> What am I doing wrong? How can one link in circular dependencies using
>> libtool?
>
>Oh, most likely they are broken, but to be honest, I have no idea. We
>don't have a proper test for them, so we can't expect them to stay
>unbroken. The reason I have asked for details above is that we may be
>able to generate a decent test case from your situation, and then work
>from that.
Well if theres more I can do to help in building a test case, just let
me know / ask.
-tom