guile-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: guile build failure - help !


From: Neil Jerram
Subject: Re: guile build failure - help !
Date: Thu, 20 Nov 2008 23:54:45 +0000

2008/11/20 Andy Wingo <address@hidden>:
> Hi Dave,
>
> On Thu 20 Nov 2008 00:01, Dave Nadler <address@hidden> writes:
>
>> /cygdrive/d/home/drn/guile-1.8.5/libguile/guile.c:72: undefined
>> reference to `_l
>> t__PROGRAM__LTX_preloaded_symbols'
>
> I think this is because we don't support libltdl version 2.2 yet,
> unfortunately. Someone with access to that version of libtool needs to
> make a patch :) Until then, if it's possible, downgrade to libtool
> 1.5.26 and try again.
>
> Sorry for the irritation,

I couldn't resist looking into this a bit more.

Seems there is a dependency between ltdl.h, which (in version 1.5.26) includes:

#define LTDL_SET_PRELOADED_SYMBOLS()            LT_STMT_START{  \
        extern const lt_dlsymlist lt_preloaded_symbols[];               \
        lt_dlpreload_default(lt_preloaded_symbols);                     \
                                                }LT_STMT_END

and libtool.m4, which (also in version 1.5.26) autogenerates code that includes:

/* The mapping between symbol names and symbols. */
const struct {
  const char *name;
  lt_ptr_t address;
}
lt_preloaded_symbols[[]] =
{
  ...

I haven't yet worked how the code generated by libtool.m4 eventually
gets linked with guile.c, but I'm pretty sure that's what happens.

When we (i.e. Ludovic :-)) builds a new Guile release, we do it on a
machine with libtool 1.5.26.  As part of the autogen.sh step, the
libtool.m4 on that machine gets copied into aclocal.m4, and aclocal.m4
is included in the release tarball.  So then the tarball is
effectively hardcoded to generate lt_preloaded_symbols.

When Guile is built on a machine with libtool 2.2, the problem is an
extra line in the libtool 2.2 version of ltdl.h:

#define lt_preloaded_symbols    lt__PROGRAM__LTX_preloaded_symbols

This causes the code in guile.c to reference
lt__PROGRAM__LTX_preloaded_symbols, and the aclocal.m4-generated code
doesn't define that, so we have an undefined reference.

Unfortunately, I can't yet see that this explanation suggests any nice
solutions...

    Neil




reply via email to

[Prev in Thread] Current Thread [Next in Thread]