This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Android native build of GCC
- From: Alexander Monakov <amonakov at ispras dot ru>
- To: Cyd Haselton <chaselton at gmail dot com>
- Cc: Andrew Haley <aph at redhat dot com>, Hans-Peter Nilsson <hp at bitrange dot com>, "gcc at gcc dot gnu dot org" <gcc at gcc dot gnu dot org>
- Date: Sun, 15 Feb 2015 20:53:10 +0300 (MSK)
- Subject: Re: Android native build of GCC
- Authentication-results: sourceware.org; auth=none
- References: <54AE581C dot 5070003 at redhat dot com> <alpine dot BSF dot 2 dot 02 dot 1502060258210 dot 10842 at arjuna dot pair dot com> <54D48673 dot 9070901 at redhat dot com> <alpine dot BSF dot 2 dot 02 dot 1502060458370 dot 29537 at arjuna dot pair dot com> <54D49731 dot 7030407 at redhat dot com> <F47323AC-2C7B-47B8-B630-D03A629DD347 at gmail dot com> <54D4A6C2 dot 1040808 at redhat dot com> <CAHu5Prbo2J1p2ueC3G5A6r-ZUo0z6JG1X_9OmshEyKPjjh0hTQ at mail dot gmail dot com> <54D4EA79 dot 10909 at redhat dot com> <6A2D97AB-19B8-4A78-ABE7-B486D1C41FCC at gmail dot com> <54DB14AB dot 3040501 at redhat dot com> <87A6FCF6-9A36-43DE-9981-6663EF51D81F at gmail dot com> <54DB3CB7 dot 1040108 at redhat dot com> <9EFDD493-55C2-4E38-B631-48296428F0AE at gmail dot com> <54DF2CA7 dot 3050303 at redhat dot com> <26AEFC9C-852D-4DE4-A396-79707D3CF48B at gmail dot com>
> Given that info...and in spite of my aforementioned limited knowledge I
> went back to take another look at the source and found this in
> libfakechroot.c
>
> /bld/fakechrt/fakechroot-2.16 $ grep -C 4 dlsym src/libfakechroot.c
> /* Lazily load function */
> LOCAL fakechroot_wrapperfn_t fakechroot_loadfunc (struct fakechroot_wrapper * w)
> {
> char *msg;
> if (!(w->nextfunc = dlsym(RTLD_NEXT, w->name))) {;
> msg = dlerror();
> fprintf(stderr, "%s: %s: %s\n", PACKAGE, w->name, msg != NULL ? msg : "unresolved symbol");
> exit(EXIT_FAILURE);
> }
>
> I'm fairly certain I remember reading something about Android and lazy
> function loading....how it doesn't handle it well or does so differently
> from standard Linux builds. At any rate, I believe the above code is
> responsible for those annoying 'fakechroot: undefined reference to dlopen'
> errors, so I'll see if I can fix that.
In Android's Bionic libc, the implementation of dlopen() resides in the
dynamic loader, and not present in libdl.so. So to obtain the pointer to
dlopen the code like above can use dlsym(RTLD_DEFAULT, "dlopen"), but not
RTLD_NEXT (the loader precedes the fakeroot library in the lookup chain).
The preceding discussion seems to have libc and libdl switched. Normally the
implementation of dlopen is found in libdl.so, but not in libc.so.
Hope that helps,
Alexander