This is the mail archive of the crossgcc@sourceware.cygnus.com mailing list for the crossgcc project.

See the CrossGCC FAQ for lots more infromation.


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

Re: linker search directories


> Date: Wed, 26 Jan 2000 14:05:26 +1100
> From: Brendan John Simon <Brendan.Simon@ctam.com.au>
> Reply-To: Brendan.Simon@ctam.com.au
> Organization: CTAM Pty Ltd
> X-Accept-Language: en
> 
> I am trying to build a powerpc-linux cross-compiler from
> binutils-2.9.5.0.24, gcc-2.95.2 and glibc-2.1.2 sources.  I first want
> to compile and install the native compiler from the above sources.  I
> have --prefix=/usr/local/gcc.  The binutils, gcc and glibc compile went
> fine.  I can no longer compile simple test program after I install the
> glibc files.  I have tracked this down to the linker getting
> ld-linux.so.2 from /lib instead of /usr/local/gcc/lib.  I have changed
> all the search paths in the linker scripts
> (/usr/local/gcc/i586-pc-linux-gnu/lib/ldscripts/*) but I still have the
> same problem.  Using the --verbose option with ld, I can see it is using
> a "built in" linker script which has /lib in its search path.  I can get
> the program to compile and run only if I use
> "-Wl,-rpath,/usr/local/gcc/lib".

You wish to build a cross-compiler, which is running on an i586 Linux
host, and which will compile executables which will be run on a
powerpc Linux target?

If so, you shouldn't be configuring glibc with --prefix=/usr/local at
all, unless the powerpc Linux machine has glibc configured the same
way.  You almost certainly want to configure it with --prefix=/usr.
In fact, you want to get the real glibc binaries that will be running
on the target machine and use that.

However, you don't install it in /usr (unless you want to make your
i586 system unusable!).  You configure gcc and binutils with, for
instance, --prefix=/usr/local, have glibc install into say
/tmp/glibc-root, (but not changing the prefix!) and then copy from
/tmp/glibc-root/usr/include into
/usr/local/powerpc-unknown-linux-gnu/sys-include and from
/tmp/glibc-root/lib and /tmp/glibc-root/usr/lib into
/usr/local/powerpc-unknown-linux-gnu/lib.

The stuff in /usr/local/gcc/i586-pc-linux-gnu is for native tools on
i586 linux and is not used by the cross-compiler.  On my
cross-compiling installation (from powerpc-aix to powerpc-linux), the
.x file, in
/usr/clocal/powerpc-unknown-linux-gnu/lib/ldscripts/elf32ppc.x, seems
to have an appropriate path in it:

OUTPUT_FORMAT("elf32-powerpc", "elf32-powerpc",
              "elf32-powerpc")
OUTPUT_ARCH(powerpc)
ENTRY(_start)
 SEARCH_DIR(/usr/clocal/powerpc-unknown-linux-gnu/lib);
/* Do we need any of these for elf?
   __DYNAMIC = 0;    */
PROVIDE (__stack = 0);
...

although you should be aware that it's also compiled into ld, so
changing it doesn't necessarily work.

> I can't see anything in the specs file either.  Only the
> --dynamic-linker option.  I have actually changed this to
> /usr/local/gcc/lib/ld-linux.so.2.

This certainly won't work.  On ppc linux the dynamic linker is
/lib/ld.so.1.

-- 
- Geoffrey Keating <geoffk@cygnus.com>

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


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