This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
Re: Crosstools and dynamic libraries
- From: none none <menwn at yahoo dot co dot uk>
- To: gcc-help at gcc dot gnu dot org
- Date: Fri, 20 Jul 2007 09:40:25 +0100 (BST)
- Subject: Re: Crosstools and dynamic libraries
Thanks for your quick answer. Yes I have noticed
myself that the problem is that the target cannot use
both glibc of his own and the glibc I have installed
on my host even if I give LD_LIBRARY_PATH.
So what you are suggesting is to give up crosstools
and try build my own tool chain using the lib path of
my embedded system. Could I copy the *.so files that
my /lib dir contains on my embedded system and use
them while I make, make install the binutils, gcc on
my host machine? Can anyone suggest documentation or a
how to for this as I have found only for bootstraping
and building everything (binutils,gcc,glibc) from
scratch.
Moreover my /lib dir on the target system has very few
libraries and it seems to have been built using
egcs-2.91.66- does this put any restrictions on which
gcc/binutils should I use? In /lib dir there is
libc-1.99.so (libc.so.6 is a symbolic link to it) as
the glibc shared library. ( I have not set up the
system in the first place but took it ready with linux
on it)
I have to admit that I am very new to cross
development. Thanks for any help
Andreas Sotirakopoulos
--- Kai Ruottu <karuottu@mbnet.fi> wrote:
> none none wrote:
>
> > I have tried to produce executable code for my
> embedded linux system
> with the cross-gcc
> > when I try to run it on my target system I get
> the following error:
> > bash$./hello_world
> > ./hello_world: error in loading shared libraries
> > : undefined symbol: __libc_start_main
> > I know that I am supposed to export to my target
> system the dynamic
> libraries I need.
>
> No, no ! Totally vice versa - you should copy the
> runtimes and
> development parts from your
> target system onto the cross host before starting to
> build the cross GCC
> there! If you would
> build a native GCC onto your target system, it would
> use the '/lib',
> '/usr/include' and '/usr/lib'
> stuff on it... Totally in the same way the cross GCC
> would need to use
> this same stuff when
> creating executables for this target system. So you
> only need to build
> binutils and GCC for
> your cross-host, they must run there meanwhile the
> target C library is
> something which was
> produced for the target system, not for the host
> system!
>
> If the target system hasn't any C library for it
> yet, then you must
> produce it (on the cross host)!
>
> > The problem is that I cannot find the libraries
> neither in
> crosstools directory nor in eldk dir.
> > Where are they?
>
> Just look at '/lib' (the runtimes) and '/usr/lib'
> (development
> libraries) or the "install CD"s for your
> embedded Linux (the development parts aren't surely
> installed)! Please
> look 'bash' with 'ldd' in
> your Linux target system :
>
> bash$ ldd /bin/bash
>
> A 'bash' in a Linux distro lists quite a lot
> runtimes, so in order to
> run bash, one should have them
> all already installed! When you could run 'bash'
> then you must have
> some runtimes installed!
>
> > Did not they created when the crosstools or eldk
> installed? Do I
> have to install or make anything
> > else I have not understood?
>
> You haven't understood that a crosstoolchain will be
> made to produce
> apps for the target system,
> not for something else! The goal in 'crosstool' and
> 'eldk' is to create
> the target system from scratch
> using the produced crosstoolchain, and the self-made
> runtime C libraries
> will be installed onto the
> target system (which hadn't anything yet) !
>
> > Furthermore when I give ldd hello_world in my
> host platform I get the
> message:
> > not a dynamic executable
> > where in my target system I get
> > libc.so.6 => /lib/libc.so.6 (0x30000000)
> > /lib/ld.so.1 => /lib/ld.so.1 (0x08000000)
>
> So you ALREADY HAVE the required '/lib/libc.so.6'
> and '/lib/ld.so.1' on
> your target system! But
> you DIDN'T USE THEM in your crosstoolchain although
> for all sanity you
> should have done so!
> Then the apps produced there would have been linked
> against these
> linktime/runtime libraries. The
> crosstoolchain you made was targeted for SOMETHING
> ELSE, and uses some
> other target libs,
> so there is no guarantee that the executables made
> with it could run on
> your target system :-(
>
>
___________________________________________________________
Yahoo! Mail is the world's favourite email. Don't settle for less, sign up for
your free account today http://uk.rd.yahoo.com/evt=44106/*http://uk.docs.yahoo.com/mail/winter07.html