[uClibc]cvs commit to uClibc/ld.so by andersen
AVENARD,JEAN-YVES (HP-Australia,ex2)
jean-yves_avenard at hp.com
Tue Apr 17 23:45:23 UTC 2001
I have to admit that I'm with you on this one...
And I do not see why having separate library ease the compilation too
Jean-Yves
---
Jean-Yves Avenard
Hewlett-Packard - Embedded and Personal Systems / Platform Technology Group
351 Burwood Hwy, Forest Hill, Victoria 3130 - Australia
Tel: +61 3 88773740 - Fax: +61 3 9802 7714 - mail: jean-yves_avenard at hp.com
> -----Original Message-----
> From: Tom Cameron [mailto:TCameron at stmarysbank.com]
> Sent: Wednesday, 18 April 2001 5:22 AM
> To: 'Manuel Novoa III'; Michael Shmulevich
> Cc: andersen at lineo.com; Tom Cameron; uclibc at uclibc.org
> Subject: RE: [uClibc]cvs commit to uClibc/ld.so by andersen
>
>
> Hello,
> I would like to note that I don't like the idea of having
> multiple libraries (libcrypt, libresolv, etc.). I like having one
> library that my programs link against. This means that I
> don't have to
> set a million-and-a-half options if my libs aren't in a
> standard place,
> and that the end file system has less overhead (depending on
> what fs you
> use, this could be many bytes to nearly a kilobyte. That's my .25
> (inflation). Just something to think about before we create a little
> gnu. Cooking times may vary. ; )
>
> --
> Thomas Cameron
> Network Technician / Operations Specialist
> St. Mary's Bank
>
> > -----Original Message-----
> > From: Manuel Novoa III [SMTP:mnovoa3 at bellsouth.net]
> > Sent: Tuesday, April 17, 2001 8:19 AM
> > To: Michael Shmulevich
> > Cc: andersen at lineo.com; Tom Cameron; uclibc at uclibc.org
> > Subject: Re: [uClibc]cvs commit to uClibc/ld.so by andersen
> >
> > Michael,
> >
> > On Tue, 17 Apr 2001, Michael Shmulevich wrote:
> > > Manuel Novoa III wrote:
> > >
> > > > Maybe I wasn't clear in my emails earlier. I have a patched
> > version of
> > > > ld.so-1.9.11 which generates two dynamic linkers
> > ld-linux-<arch>-uclibc.so.1;
> > > > one looks in /lib and /usr/lib as usual (intended for a
> glibc-less
> > system) and
> > > > one which looks in /usr/<arch>-linux-uclibc/lib only
> (intended for
> > a
> > > > development system).
> > >
> > > I don't see why this is so important. For the moment you
> may assume
> > all
> > > libraries at the target machine reside under /lib and
> /usr/lib, and
> > > don't care for development. If you put some libraries in unusual
> > place,
> > > just add it to LD_LIBRARY_PATH, and create a softlink for
> > > /lib/ld-linux.so to point to a correct place. If you crosscompile,
> > then
> > > you won't able to run the programs on development machine
> either, so
> > I
> > > don't care much for the place of shared libs and ld-linux.so.
> >
> > Several points here:
> >
> > 1) LD_LIBRARY_PATH is ignored for suid bins. To get around that, I
> > even
> > modified the gcc wrapper to use the -rpath linker option. In fact,
> > my working
> > version does that now when you want to test with the uninstalled
> > shared lib in
> > the build directory.
> >
> > 2) Using a customized dynamic linker that looks for shared
> libs _only_
> > in a
> > directory of uClibc-compatible shared libs allows us to use the
> > standard method
> > of adding libs to the gcc (wrapper) command line. For
> instance, doing
> > something like -ldl with the new scheme, where libdl.so.1 exists in
> > the uClibc
> > shared lib directory, links the correct library. The only way I
> > could get
> > this to happen without a customized dynamic linker was to explicitly
> > list
> > /lib/libdl.so.1 on the command line.
> >
> > 3) As an extension to (2), we can now build libuClibc.so.1 as
> > libc.so.1 without
> > conflict. This wasn't so much a problem now, but as Erik wants to
> > start
> > breaking things up into libcrypt, libresolv, etc. this was going to
> > become a
> > problem. I didn't want to have to start using libuClibcrypt,
> > libuClibresolv,
> > etc. or any other "non-standard" naming scheme. Why force ourselves
> > to make
> > the modifications to Makefiles that would be necessary when we can
> > avoid that
> > by using standard names.
> >
> > 4) Obviously you won't be running cross-compiled programs on a
> > develpment
> > machine. But if you're developing and running on the same
> arch, using
> > the
> > customized linker on the devel machine lets you avoid name-clashes
> > with the
> > standard libs on your system. And, since the two customized dynamic
> > linkers
> > have the same name and live in the same place,
> > /lib/ld-linux-<arch>-uclibc.so.1, you don't have to relink things to
> > move to the
> > target system. All you need to do is put the version of the dynamic
> > linker
> > that looks in the standard places for libs and ld.so.cache on the
> > target and
> > you can put you uClibc-compat shared libs in /lib and /usr/lib, just
> > as you
> > would with the glibc-compat libs on a normal system.
> >
> > > You seem to unnedingly complicate the matter. I use ld.so as-is,
> > with
> > > some minor assembly corrections, and it works.
> >
> > Believe me, I would love it if you can show me how to add
> -ldl to the
> > gcc
> > wrapper command line and have things build and run correctly. I for
> > one would
> > love to hear what these "minor assembly corrections" are.
> >
> > > > The later also looks for the ld.so.cache file in
> > > > /usr/<arch>-linux-uclibc/etc
> > >
> > > This is particularly bad idea, since you cannot cross-create
> > ld.so.cache
> > > at all.
> >
> > Thank you for thinking I'm such an idiot...
> >
> > There are _2_ versions of the dynamic linker. One (devel) consults
> > /usr/<arch>-linux-uclibc/etc/ld.so.cache, which is built by a
> > customized
> > ldconfig. The other (target) consults /etc/ld.so.cache as usual.
> > This avoids
> > problems when glibc-compat and uClibc-compat shared libs having the
> > same names
> > and major numbers on the devel system.
> >
> > > > The idea is that you put the second version in /lib on the
> > > > devel system, and it works (assuming same arch of course). You
> > put the first
> > > > version in /lib on the target system. Since the paths of the
> > shared libs
> > > > aren't included in the compiled bins, the shared lib
> dependencies
> > are resolved
> > > > correctly in both cases.
> > >
> > > How does ld-linux.so know whether it runs on development
> system, or
> > a
> > > target machine?
> >
> > Once again... there are _two_ different versions with the
> same name.
> > The only
> > differences between the two are the paths they use to locate shared
> > libs and
> > the path they use for ld.so.cache.
> >
> > > > I've successfully used this even with libdl.so.
> >
> > As have I. But only if I explicitly added /lib/libdl.so.1,
> not -ldl,
> > to the
> > gcc wrapper command line. Again, the only way I have found
> that gives
> > the
> > correct behavior is using a customized dynamic linker.
> >
> > In fact, here is a quote from a message I posted to this list, and
> > emailed
> > directly to _you_, on April 12.
> >
> > -------------
> > Now, if anyone has any suggestions as to how to get correct behavior
> > from
> > the wrapper on a development system _without_ having a
> custom dynamic
> > linker,
> > please let me know. I've gone through the info pages for
> both gcc and
> > ld with
> > no success.
> > --------------
> >
> > As yet, I have received no replies. The question still stands
> > however.
> >
> > Manuel
>
>
> _______________________________________________
> uclibc mailing list
> uclibc at uclibc.org
> http://uclibc.org/mailman/listinfo/uclibc
>
More information about the uClibc
mailing list