[prev in list] [next in list] [prev in thread] [next in thread] 

List:       pykde
Subject:    Re: [PyQt] Android & the pyqtdeploy tool: the provided demo relies on undocumented libraries/headers
From:       Phil Thompson <phil () riverbankcomputing ! com>
Date:       2018-08-27 12:08:42
Message-ID: F85EB7FC-9AEA-4414-B1CD-B2043468655A () riverbankcomputing ! com
[Download RAW message or body]

On 23 Aug 2018, at 9:09 pm, Jonathan Leaders <jonathan@leadersandco.com> wrote:
> 
> Hey Phil! Thank you so much for the direction. We got further by following your \
> advice of using the same versions of SIP & PyQt5 that was found in the pyqtdeploy \
> demo image in the docs 
> I'm a big fan of software that is "one-click" dev environment setup. I noticed I \
> had to use specific old versions of PyQt5, Python, SIP, for the pyqtdeploy demo to \
> work. It'd be interesting to add a --download-libs argument to demo-build.py that \
> automatically downloads the source archives, since only certain versions are \
> compatible. To help make that easier, here is a list of statements to download \
> versions that are listed in your docs image: 
> 
> # you must first run the universal Qt Installer script to install exactly 5.9.3
> # I used qt-unified-linux-x64-3.0.5-online.run to install exactly 5.9.3 in \
> ~/Qt5.9.3 ln -s ~/Qt5.9.3/ src/Qt
> 
> cd src
> 
> # Download source archive required by pyqtdeploy 2.1 (only certain versions work)
> wget https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tar.xz
> wget https://superb-sea2.dl.sourceforge.net/project/pyqt/sip/sip-4.19.6/sip-4.19.6.tar.gz
>  wget https://phoenixnap.dl.sourceforge.net/project/pyqt/PyQt5/PyQt-5.9.2/PyQt5_gpl-5.9.2.tar.gz
>  wget https://download.qt.io/archive/qt/5.9/5.9.3/single/qt-everywhere-opensource-src-5.9.3.tar.xz
>  
> # Versions that are known to fail in pyqtdeploy 2.1:
> #wget https://www.python.org/ftp/python/3.6.6/Python-3.6.6.tar.xz
> #wget http://mirrors.ocf.berkeley.edu/qt/archive/qt/5.11/5.11.1/single/qt-everywhere-src-5.11.1.tar.xz
>  #wget https://superb-sea2.dl.sourceforge.net/project/pyqt/sip/sip-4.19.12/sip-4.19.12.tar.gz
>  #wget https://phoenixnap.dl.sourceforge.net/project/pyqt/PyQt5/PyQt-5.11.2/PyQt5_gpl-5.11.2.tar.gz
>  
> cd -
> 
> 
> 
> The documentation aside, here's where I'm stuck now. Have you seen this error \
> before? This happens after everything is built, the build directory is removed, and \
> things are freezing, so it's really late in the process. It looks like its an issue \
>                 linking:
> ---------------------
> 
> /home/jonny/Android/android-ndk-r17b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-g++ \
> --sysroot=/home/jonny/Android/android-ndk-r17b/platforms/android-28/arch-arm/ \
> -Wl,-soname,libpyqt-demo.so -Wl,-rpath=/home/jonny/Qt5.9.3/5.9.3/android_armv7/lib \
> -Wl,--no-undefined -Wl,-z,noexecstack -shared -o libpyqt-demo.so pyqtdeploy_main.o \
> pyqtdeploy_start.o pdytools_module.o _heapqmodule.o _math.o _posixsubprocess.o \
> mathmodule.o selectmodule.o timemodule.o qrc_pyqtdeploy.o   \
> -L/home/jonny/Android/android-ndk-r17b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a \
> -L/home/jonny/Android/android-ndk-r17b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.9.x \
> -L/home/jonny/Projects/organic-mail/tools/pyqtdeploy-2.1/demo/sysroot-android-32/lib \
> -L/home/jonny/Projects/organic-mail/tools/pyqtdeploy-2.1/demo/sysroot-android-32/lib/python3.6/site-packages \
> -L/home/jonny/Projects/organic-mail/tools/pyqtdeploy-2.1/demo/sysroot-android-32/lib/python3.6/site-packages/PyQt5 \
> -lQtAndroidExtras -lQtCore -lQtGui -lQtNetwork -lQtWidgets -lpython3.6 -lsip \
> -L/home/jonny/Qt5.9.3/5.9.3/android_armv7/lib -lQt5Widgets \
> -L/opt/android/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a \
> -L/opt/android/android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.9 \
> -lQt5Gui -lQt5Network -lQt5AndroidExtras -lQt5Core -lGLESv2 -lgnustl_shared -lgcc \
>                 -llog -lz -lm -ldl -lc
> /home/jonny/Projects/organic-mail/tools/pyqtdeploy-2.1/demo/sysroot-android-32/lib/libpython3.6.a(posixmodule.o):posixmodule.c:function \
>                 os_makedev: error: undefined reference to 'makedev'
> /home/jonny/Projects/organic-mail/tools/pyqtdeploy-2.1/demo/sysroot-android-32/lib/libpython3.6.a(posixmodule.o):posixmodule.c:function \
>                 os_minor: error: undefined reference to 'minor'
> /home/jonny/Projects/organic-mail/tools/pyqtdeploy-2.1/demo/sysroot-android-32/lib/libpython3.6.a(posixmodule.o):posixmodule.c:function \
>                 os_major: error: undefined reference to 'major'
> collect2: error: ld returned 1 exit status
> Makefile:259: recipe for target 'libpyqt-demo.so' failed
> make: *** [libpyqt-demo.so] Error 1
> 
> -----------
> 
> Doing some digging into the C code, it appears it has to with this block in line 58 \
>                 of posixmodule.c \
>                 https://github.com/python/cpython/blob/3.6/Modules/posixmodule.c:
> ------
> 
> #ifdef HAVE_SYS_SYSMACROS_H
> /* GNU C Library: major(), minor(), makedev() */
> #include <sys/sysmacros.h>
> #endif
> 
> --------
> I wonder if it was a recent change based on this comment in February: \
> https://github.com/IntelRealSense/librealsense/pull/1114#issuecomment-362528830 
> Any ideas? I'm stumped on how to get the Android APK of the pyqtdeploy demo built. \
> Even with the versions listed it seems to fail building.

Try this patch.

Phil


["pyqtdeploy.patch" (pyqtdeploy.patch)]

diff -r 84c577975fd4 pyqtdeploy/sysroot/plugins/python/pyconfig.py
--- a/pyqtdeploy/sysroot/plugins/python/pyconfig.py	Sat Aug 25 17:07:02 2018 +0100
+++ b/pyqtdeploy/sysroot/plugins/python/pyconfig.py	Mon Aug 27 12:51:18 2018 +0100
@@ -1171,7 +1171,7 @@
     Config('HAVE_SYS_SYSCALL_H', default=1),
 
     # Define to 1 if you have the <sys/sysmacros.h> header file.
-    Config('HAVE_SYS_SYSMACROS_H', linux=1),
+    Config('HAVE_SYS_SYSMACROS_H', android=1, linux=1),
 
     # Define to 1 if you have the <sys/sys_domain.h> header file.
     Config('HAVE_SYS_SYS_DOMAIN_H', macos=1),

[Attachment #4 (text/plain)]

_______________________________________________
PyQt mailing list    PyQt@riverbankcomputing.com
https://www.riverbankcomputing.com/mailman/listinfo/pyqt

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic