Closer.

make && make install ran successfully; however running the newly
installed binary results in the same error.

On Sat, Jan 24, 2015 at 5:08 PM, Frank, Matthew I
<matthew.i.fr...@intel.com> wrote:
> Android's dlopen() works slightly differently than the normal Unix dlopen() 
> in at least two different ways.  I haven't seen your particular problem, but 
> that's probably because I'm cross-building CPython (building everything I 
> need on a Linux machine, and then copying the install directory to the 
> Android machine.)
>
> (1) When building for Android you need to explicitly include the "-ldl" flag 
> on the command line for the link step.  (In Linux the dlopen() routine is 
> included in libc, so "-ldl" is not necessary).  I suspect that some part of 
> your distutils was not linked correctly.  (Since I'm cross-building I've 
> never run distutils on the Android side, which is probably why I've not seen 
> this.)  Your best bet would be to run under a debugger and figure out which 
> line of C code in which .so file is throwing the error.  Then going back to 
> the build scripts and looking at how that .so file is getting linked.  (For 
> an example of someone else having a similar problem see for example, 
> http://stackoverflow.com/questions/25846927/git-built-on-android-throws-undefined-reference-to-dlopen-error).
>
> (2) The other possibility has to do with a quirk in Android's dlopen() 
> implementation.  On most legacy Unix systems (including Linux) when you 
> dlopen() a library Z then all the already loaded libraries A, B, C, ... are 
> searched for any dependences of Z (even if Z was not explicitly linked 
> against any of A, B, C,...).  On Android (perhaps for security reasons) 
> that's not true, if Z depends on A, then you need to have "-lA" when you link 
> Z.  An example (and patch) for this problem is 
> http://bugs.python.org/issue21668.
>
> -Matt
>
>> -----Original Message-----
>> From: Cyd Haselton [mailto:chasel...@gmail.com]
>> Sent: Friday, January 23, 2015 10:50 AM
>> To: Brett Cannon
>> Cc: Guido van Rossum; Python-Dev
>> Subject: Re: [Python-Dev] Undefined dlopen When Building Module On Android
>>
>> I guess I'll keep waiting...given the zero responses I've gotten from the 
>> android side.
>> :-(.
>>
>> In the meantime...in case anyone is interested... since I have the working 
>> binary, I
>> executed it and went through each command in setup.py to see what throws the
>> 'undefined reference to dlopen' error.
>> Turns out that the distutils module is the culprit...specifically 
>> distutils.core.
>>
>>
>> On Thu, Jan 22, 2015 at 8:33 AM, Brett Cannon <br...@python.org> wrote:
>> > A mobile SIG is being formed, but it doesn't have a mailing list yet,
>> > else that would be a good place to ask this question.
>> >
>> > On Wed Jan 21 2015 at 5:54:39 PM Guido van Rossum <gu...@python.org> wrote:
>> >>
>> >> Maybe try a list focused on Android development? Few people in the
>> >> Python core development community have any Android experience. But
>> >> the issues and context you offer seem to be related to the Android world, 
>> >> not to
>> Python.
>> >> (dlopen is used by a lot of systems, not just Python.)
>> >>
>> >> On Wed, Jan 21, 2015 at 2:43 PM, Cyd Haselton <chasel...@gmail.com> wrote:
>> >>>
>> >>> On Mon, Jan 19, 2015 at 5:23 PM, Cyd Haselton <chasel...@gmail.com>
>> >>> wrote:
>> >>> > On Mon, Jan 19, 2015 at 8:51 AM, Cyd Haselton
>> >>> > <chasel...@gmail.com>
>> >>> > wrote:
>> >>> >> Hello,
>> >>> >> I'm struggling with a build issue on Android; I've posted to the
>> >>> >> general python list with no result, so I'm re-posting here in
>> >>> >> hopes that someone can help.  If this is the wrong place feel
>> >>> >> free to let me know.
>> >>> >>
>> >>> >> I'm attempting to build Python 2.7.8 on my Android device; I'm
>> >>> >> using an environment that simulates a Linux filesystem within the
>> >>> >> Android terminal using a port of fakechroot.  Within that
>> >>> >> environment I've ported and/or bootstrapped a number of Linux
>> >>> >> utilities (curl, git, openssl, gcc)
>> >>> >>
>> >>> >> I run ./configure, then make, and the executable and library are
>> >>> >> built.  The problem occurs when build_ext is run; the newly built
>> >>> >> python executable builds, then links _struct, and immediately
>> >>> >> afterwards I get an 'undefined reference to dlopen' error.
>> >>> >>
>> >>> >> If I run ./python setup.py --verbose -library-dirs /path/to/lib
>> >>> >> --libraries='c dl m' -f, the 'undefined reference to dlopen'
>> >>> >> error is thrown again.
>> >>> >>
>> >>> >> If I run ./python setup.py --verbose -library-dirs /path/to/lib
>> >>> >> --libraries='-lc -ldl -lm' -f the build continues past
>> >>> >> _struct...even though ld throws the expected 'unable to find -l-lc' 
>> >>> >> and other
>> errors.
>> >>> >>
>> >>> >> Let me know if you need me to provide additional information.
>> >>> >> Any help would be greatly appreciated.
>> >>> >>
>> >>> >> Cyd
>> >>> >
>> >>> >
>> >>> > Additionally I took a strace of the error producing command. The
>> >>> > following is (hopefully) a relevant portion minus the various 'no
>> >>> > such file' lines before the correct lib is found (which it always
>> >>> > is)
>> >>> >
>> >>> > 16513
>> >>> > open("/data/data/jackpal.androidterm/kbox2/bld/python/Python-
>> 2.7.8/Lib/distutils/unixccompiler.py",
>> >>> > O_RDONLY|O_LARGEFILE) = 3           16513
>> >>> >
>> >>> > open("/data/data/jackpal.androidterm/kbox2/bld/python/Python-
>> 2.7.8/Lib/distutils/unixccompiler.pyc",
>> >>> > O_RDONLY|O_LARGEFILE) = 4       16513 vfork()
>> >>> >  = 16525
>> >>> > 16513 wait4(16525,  <unfinished ...>
>> >>> > 16525 open("/data/data/jackpal.androidterm/kbox2/bin/sh",
>> >>> > O_RDONLY|O_LARGEFILE) = 3
>> >>> > 16525 execve("/data/data/jackpal.androidterm/kbox2/bin/sh", ["sh",
>> >>> > "-c", "gcc --sysroot=/usr/gcc-4.9.2/sysroot -print-multiarch >
>> >>> > build/temp.linux-armv7l-2.7/multiarch 2> /dev/null"], [/* 58 vars
>> >>> > */]) = 0
>> >>> >
>> >>> > *snip call to libc intercepted by libfakechroot*
>> >>> >
>> >>> > 16525 open("/system/lib/libc.so", O_RDONLY|O_LARGEFILE|0x80000) =
>> >>> > 3
>> >>> > 16525 open("/system/lib/libm.so", O_RDONLY|O_LARGEFILE|0x80000) =
>> >>> > 3
>> >>> > 16525 open("/dev/__properties__",
>> >>> > O_RDONLY|O_LARGEFILE|O_NOFOLLOW|0x80000) = 3
>> >>> > 16525 open("build/temp.linux-armv7l-2.7/multiarch",
>> >>> > O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, 0666) = 3
>> >>> > 16525 open("/data/data/jackpal.androidterm/kbox2/dev/null",
>> >>> > O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, 0666) = 3
>> >>> > 16525 fork()                            = 16526
>> >>> > 16525 wait4(-1,  <unfinished ...>
>> >>> > 16526 open("/acct/uid/10186/tasks", O_RDWR|O_CREAT|O_LARGEFILE,
>> >>> > 0666) = -1 EACCES (Permission denied)
>> >>> >
>> >>> > See attached for remainder
>> >>>
>> >>> Should I be posting this issue elsewhere?
>> >>> Is more information needed?
>> >>>
>> >>> _______________________________________________
>> >>> Python-Dev mailing list
>> >>> Python-Dev@python.org
>> >>> https://mail.python.org/mailman/listinfo/python-dev
>> >>>
>> >>> Unsubscribe:
>> >>> https://mail.python.org/mailman/options/python-dev/guido%40python.or
>> >>> g
>> >>
>> >>
>> >>
>> >>
>> >> --
>> >> --Guido van Rossum (python.org/~guido)
>> >> _______________________________________________
>> >> Python-Dev mailing list
>> >> Python-Dev@python.org
>> >> https://mail.python.org/mailman/listinfo/python-dev
>> >> Unsubscribe:
>> >> https://mail.python.org/mailman/options/python-dev/brett%40python.org
>
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to