This is the mail archive of the crossgcc@sourceware.org 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] | |
On Mon, 3 Nov 2008, Phil Blundell wrote:
> I used to have some patches to build a dynamically linked ldconfig for
> glibc 2.3 or so, and the resulting binary always seemed to work just
> fine. Those patches have become somewhat bit-rotten since and don't
> apply to newer versions but I don't think there is any reason why you
> couldn't do the same thing with a modern glibc.
Seems like it might be an interesting option to add. Maybe we could be
clever and build two separate ldconfigs, ldconfig (statically linked) &
ldconfig.dynamic? Up to now I've not actually opened the "building glibc"
box, just relied on crosstool-ng to do its magic for me.
> However, as you say, it is not strictly necessary to have ldconfig at
> all and more recently this is what I have been doing for embedded cases.
> You can cut down the number of directories that ld.so needs to search by
> turning off hwcap support, removing all extraneous entries from
> ld.so.conf, and coalescing your libraries into fewer directories (for
> example, if you still have /usr/X11R6/lib, move those libraries
> into /usr/lib and eliminate the search in /usr/X11R6). For most systems
> it should be straightforward to just search /lib and /usr/lib, and with
> a bit of extra effort I think you could get down to just searching /lib
> for all libraries.
The problem seems to be that glibc goes straight to ld.so.cache, and if
it's not there starts hunting like mad. Heres a simple illustration of
this:
First, with the cache present:
# strace /bin/true 2>&1 |grep open
open("/etc/ld.so.cache", O_RDONLY) = 3
open("/lib/libm.so.6", O_RDONLY) = 3
open("/lib/libc.so.6", O_RDONLY) = 3
#
Mostly straight to the point (such a lot of work to set the return code ;)
Now with the cache deleted:
# strace /bin/true 2>&1 |grep open
open("/etc/ld.so.cache", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/lib/tls/v5l/fast-mult/half/libm.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/lib/tls/v5l/fast-mult/libm.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/lib/tls/v5l/half/libm.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/lib/tls/v5l/libm.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/lib/tls/fast-mult/half/libm.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/lib/tls/fast-mult/libm.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/lib/tls/half/libm.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/lib/tls/libm.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/lib/v5l/fast-mult/half/libm.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/lib/v5l/fast-mult/libm.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/lib/v5l/half/libm.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/lib/v5l/libm.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/lib/fast-mult/half/libm.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/lib/fast-mult/libm.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/lib/half/libm.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/lib/libm.so.6", O_RDONLY) = 3
open("/lib/libc.so.6", O_RDONLY) = 3
#
Wow! I don't know what all those mystery libraries are, but it's
determined to hunt them out.
--
For unsubscribe information see http://sourceware.org/lists.html#faq
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |