This is the mail archive of the crossgcc@sources.redhat.com mailing list for the crossgcc project.

See the CrossGCC FAQ for lots more information.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Static linked cross tools


On Tue, 2004-10-19 at 16:26, Allen Curtis wrote:
<snip>

> "checking for library containing strerror...configure: error: Link test 
> are not allowed after GCC_NO_EXECUTABLES."
> 
> What does this mean?

It's coming from libtool, telling you that: 
(a) some part of your (build)host-(run)host-target triad isn't fully
defined within libtool itself,
(b) the default/required linker cannot be run, or
(c) an attempt to run the default linker for either the build or host
target failed at some point. 

In many cases the link test can indeed be run; it's just that libtool
doesn't know it: either the CSN (canonical system name) of one of the
platforms isn't known, the wrong linker is specified/guessed at (or
maybe you don't even _have_ one), or maybe an attempt to run the right
linker failed for the wrong switch values. The potential causes are
numerous.

Bottom line: as libtool builds itself for a cross-compiled/cross-linked
target, its configuration script gets called once for the build host,
and then again for the run host. In other words, the first run calls
ltconfig as you'd expect: build=$build, and host=$host ... the second
run calls ltconfig with build=$host and host=$target. If, by some
happenstance, either the host or target CSN isn't fully defined to
libtool, you'll see the GCC_NO_EXEC errors. Same thing goes if the
linker for the phase can't be found/executed, or the switch settings are
bad.

My apologies for the loose treatment of the terminology involved, but
the auto* guys recently changed these definitions, and some of the auto*
-built packages haven't completely reacted yet. 

The cure for valid GCC_NO_EXEC errors is to somehow comply with the
build requirements, or make sure good linker switches are passed in
LDFLAGS.

The cure for false GCC_NO_EXEC errors is to go in and add _proper_
support for the CSN on which libtool is choking in libtool.m4, and then
have libtool regenerate everything through a clean build. At least
that's the approach with _modern_ libtool releases. You can find the
corollaries of those m4 routines -- in older libtools -- in places like
ltconfig.sh, ltcf-cxx.sh, ltcf-c.sh, and others. Many key packages
aren't using the newer libtool yet, so you'll have to feel your way
around. 

At least libtool got its act together and did (at least what I thought)
what should be done: implemented most everything affected by CSN
differences as m4 macros. 

The "run libtool twice" philosophy is employed just about everywhere for
crosses, starting with libiberty and ending with libstdc++. I could rant
about the fact that this was done (there sure is a lot of confusion),
but I understand why: if you look at it from the maintainers' point of
view, there wasn't a lot of choice.

If you're looking for an example of what you _might_ need to do to get
your favorite CSN supported (YMMV), I got a patch accepted to libtool on
2004-10-02 for s390x-ibm-tpf ... it made the libtool-1.95d release on
the following day. 

The gcc maintainers are receptive to patches to the ancient libtool
artifacts they have as long as you've submitted a comparable patch to
libtool itself.


Good luck,
--Jim--
"Smith & Wesson: The original point & click interface."


------
Want more information?  See the CrossGCC FAQ, http://www.objsw.com/CrossGCC/
Want to unsubscribe? Send a note to crossgcc-unsubscribe@sources.redhat.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]