This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Android native build of GCC
- From: Cyd Haselton <chaselton at gmail dot com>
- To: Alexander Monakov <amonakov at ispras dot ru>
- 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 13:30:36 -0600
- 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> <alpine dot LNX dot 2 dot 11 dot 1502152207020 dot 9341 at monopod dot intra dot ispras dot ru>
On Sun, Feb 15, 2015 at 1:14 PM, Alexander Monakov <amonakov@ispras.ru> wrote:
>
>
> 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
Would it have anything to do with Android's symbol searching method?
I.e. a library must be explicitly linked and loaded if needed; on load
a library won't look to already loaded libraries to resolve symbols?