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 22:14:54 +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> <alpine dot LNX dot 2 dot 11 dot 1502152049120 dot 9341 at monopod dot intra dot ispras dot ru> <CAHu5Prb9wDhmbJU5nvaZTPQbu3ZUw4+0Hj5WUem76KhOe8mPSw at mail dot gmail dot com>
On Sun, 15 Feb 2015, Cyd Haselton wrote:
> On Sun, Feb 15, 2015 at 11:53 AM, Alexander Monakov <amonakov@ispras.ru> wrote:
> >> 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.
>
> Yet in Android's NDK documentation, they state that in order to use
> dlopen() functionality in native code you must link against libdl and
> include dlfcn.h. Why would this be the case if the dlopen()
> implementation is not in libdl?
> (documentation link: http://www.kandroid.org/ndk/docs/STABLE-APIS.html)
That's the standard way of using dlopen, i.e. same as you would do it on Linux
with glibc for example. So the link merely says that you can get dlopen the
same way as usual.
The difference is that Android's libdl only contains stub symbols for
dlopen&co, and the real symbols can be looked up in the dynamic loader. That
RTLD_NEXT does not work for obtaining a pointer for dlopen, as it works on
glibc, is quite unfortunate, and probably a bug in Bionic.
Alexander