[Mobile-sig] [Python-Dev] Import Fails in setup.py On Android

Cyd Haselton chaselton at gmail.com
Sat Feb 7 12:36:50 CET 2015


Hello Russ,
Thanks for the update.

I'm building Python 3.4.2 from sources, (using a GCC that I originally ported, then upgraded on device) on an Android device in an environment that simulates a Linux filesystem using fakechroot (Terminal Emulator and KBOX); Python is not currently installed in this environment.

I've built other utilities in this environment successfully; the key is making sure that anything that requires dlopen() is built with shared libraries and is linked with -lc -ldl, as Android's dlopen() is not in its libc but in -ldl. The shared part is due to a limitation of the libfakechroot that the KBOX environment uses; anything calling dlopen() without the necessary links will cause fakechroot to terminate the process and throw an undefined symbol error

For the Python build I've specified -lc -ldl in the appropriate environmental variables, in Modules/Setup and in setup.py.  The initial python binary is built, but it fails (with the undefined ref to dlopen()) when importing the extension modules it has has built.  I have run nm on those modules and...even though -lc -ldl is on the extension build command line...the dlopen() symbol is not there.

Sorry for the long explanation. Let me know if there's info I've left out.



On February 6, 2015 8:10:16 PM CST, Russell Keith-Magee <russell at keith-magee.com> wrote:
>Hi Cyd,
>
>This list is as good a place as any for what you're describing.
>
>However, it's a little difficult to provide advice without stack traces
>and
>details of how you've built your Python build to start with. For
>example,
>are you cross compiling? If so, the problem you've described could be
>caused by referencing the wrong Python instance when running setup.py.
>
>Yours,
>Russ Magee %-)
>
>On Fri, Feb 6, 2015 at 3:46 AM, Cyd Haselton <chaselton at gmail.com>
>wrote:
>
>> Also, if I've got the wrong list, please let me know.  Links to the
>> correct list/lists are optional; I just want to know if this is the
>> right place to get help so that I can keep searching if it isn't.
>>
>> On Thu, Feb 5, 2015 at 5:40 AM, Cyd Haselton <chaselton at gmail.com>
>wrote:
>> > Since i'm working on an Android tablet, I am forwarding the
>original
>> message
>> > I sent to python-dev instead of re-typing the entire thing.
>> >
>> > To summarize: I'm building in a fakechroot environment on Android
>that
>> > supports dynamic calls to libc only. Something in the
>> importlib._bootstrap
>> > process is not linking to...or has not been linked to...the
>necessary
>> > libraries (I've checked the module...it is being linked to -lc
>-ldl) but
>> I
>> > can't figure out what...as there's not a lot in the python docs on
>it.
>> >
>> > I'm currently reading through the importlib docs but any help would
>be
>> > greatly appreciated.
>> >
>> > ________________________________
>> > From: Eric Snow <ericsnowcurrently at gmail.com>
>> > Sent: February 3, 2015 12:10:54 AM CST
>> > To: Cyd Haselton <chaselton at gmail.com>
>> > Cc: Python-Dev <python-dev at python.org>
>> > Subject: Re: [Python-Dev] Import Fails in setup.py On Android
>> >
>> > On Mon, Feb 2, 2015 at 12:36 PM, Cyd Haselton <chaselton at gmail.com>
>> wrote:
>> >>
>> >>  After fixing a segfault issue (many thanks Ryan) I'm back to the
>same
>> >> issue
>> >>  I was having with Python 2.7.8; the newly built python throws an
>> >> undefined
>> >>  reference to dlopen when running setup.py...specifically when
>importing
>> >>  just-built extensions
>> >>
>> >>  I've managed to narrow the problem down to the following line:
>> >>
>> >>  importlib._bootstrap._SpecMethods(spec).load()
>> >
>> >
>> > That call is where modules are created (and executed) via the
>loader
>> > designated for the module by the import machinery.  So a problem
>here
>> > may simply reflect a problem with the loader.  Which module is
>being
>> > imported when you run into trouble?  Is it a C-extension module?
>> >
>> > Also keep in mind that
>> > basically everything in importlib._bootstrap is
>> > frozen into your Python binary when you build Python (or should
>be).
>> > So if you are seeing any errors related to something missing or
>broken
>> > in importlib._bootstrap, it could be related to the build step
>where
>> > importlib gets frozen.
>> >
>> > Either way, more info (e.g. a traceback) would be great if you need
>more
>> > help.
>> >
>> > -eric
>> >
>> >
>> > --
>> > Sent from my Android device with K-9 Mail. Please excuse my
>brevity.
>> _______________________________________________
>> Mobile-sig mailing list
>> Mobile-sig at python.org
>> https://mail.python.org/mailman/listinfo/mobile-sig
>>

-- 
Sent from my Android device with K-9 Mail. Please excuse my brevity.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/mobile-sig/attachments/20150207/66954777/attachment.html>


More information about the Mobile-sig mailing list