Spinning up compiled pyqt extensions
Phil Thompson
phil at riverbankcomputing.com
Thu Oct 6 17:10:23 BST 2022
As I said, you probably need to install the targeted version of Qt using
the on-line installer.
Phil
On 06/10/2022 00:54, Patrick Stinson wrote:
> So I installed PyQt-5.15.2, sip, and pyqt-builder from pip, then
> compiled
> qt-5.15.2, but still got an undefined symbol for the libstdc++ symbol
> _ZdaPvmwhich demangles to operator delete[](void*, unsigned long). So I
> added qmake-settings = ["LIBS += -lstdc++"] to the build config for my
> module but no change. here is 1) the failing import call of my sip
> extension _vedanaprivate, 2) ldd for the _vedanaprivate lib file, and
> 3)
> ldd for the complaining QtCore.abi3.so:
>
> (familydiagram-server) *parallels at hurin*:*~/familydiagram-server*$
> python
> -c "import _vedanaprivate"
>
> Traceback (most recent call last):
>
> File "<string>", line 1, in <module>
>
> ImportError:
> /home/parallels/.local/share/virtualenvs/familydiagram-server-p83tSG-_/lib/python3.7/site-packages/PyQt5/
> QtCore.abi3.so: undefined symbol: _ZdaPvm, version Qt_5
>
> (familydiagram-server) *parallels at hurin*:*~/familydiagram-server*$ ldd
> /home/parallels/.local/share/virtualenvs/familydiagram-server-p83tSG-_/lib/python3.7/site-packages/_
> vedanaprivate.cpython-37m-x86_64-linux-gnu.so
>
> linux-vdso.so.1 (0x00007fff047fb000)
>
> libQt5Core.so.5 => /home/parallels/qt/lib/libQt5Core.so.5
> (0x00007f515b870000)
>
> libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6
> (0x00007f515b637000)
>
> libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f515b40f000)
>
> libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f515b3f3000)
>
> libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f515b30c000)
>
> libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1
> (0x00007f515b2ea000)
>
> /lib64/ld-linux-x86-64.so.2 (0x00007f515bf27000)
>
> (familydiagram-server) *parallels at hurin*:*~/familydiagram-server*$ ldd
> /home/parallels/.local/share/virtualenvs/familydiagram-server-p83tSG-_/lib/python3.7/site-packages/PyQt5/
> QtCore.abi3.so
>
> linux-vdso.so.1 (0x00007ffee7672000)
>
> libQt5Core.so.5 =>
> /home/parallels/.local/share/virtualenvs/familydiagram-server-p83tSG-_/lib/python3.7/site-packages/PyQt5/Qt5/lib/libQt5Core.so.5
> (0x00007fe211a00000)
>
> libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6
> (0x00007fe2117d6000)
>
> libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fe2115ae000)
>
> libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0
> (0x00007fe212231000)
>
> libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fe212215000)
>
> libicui18n.so.56 =>
> /home/parallels/.local/share/virtualenvs/familydiagram-server-p83tSG-_/lib/python3.7/site-packages/PyQt5/Qt5/lib/libicui18n.so.56
> (0x00007fe211000000)
>
> libicuuc.so.56 =>
> /home/parallels/.local/share/virtualenvs/familydiagram-server-p83tSG-_/lib/python3.7/site-packages/PyQt5/Qt5/lib/libicuuc.so.56
> (0x00007fe210c00000)
>
> libicudata.so.56 =>
> /home/parallels/.local/share/virtualenvs/familydiagram-server-p83tSG-_/lib/python3.7/site-packages/PyQt5/Qt5/lib/libicudata.so.56
> (0x00007fe20f200000)
>
> libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fe21220e000)
>
> libgthread-2.0.so.0 => /lib/x86_64-linux-gnu/libgthread-2.0.so.0
> (0x00007fe212209000)
>
> libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0
> (0x00007fe20f0c6000)
>
> libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fe2114c7000)
>
> libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1
> (0x00007fe2114a7000)
>
> /lib64/ld-linux-x86-64.so.2 (0x00007fe21257e000)
>
> libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007fe20f050000)
>
> (familydiagram-server) *parallels at hurin*:*~/familydiagram-server*$
> c++filt
> _ZdaPvm
>
> operator delete[](void*, unsigned long)
>
> (familydiagram-server) *parallels at hurin*:*~/familydiagram-server*$
>
> On Wed, Oct 5, 2022 at 4:59 AM Patrick Stinson <patrickkidd at gmail.com>
> wrote:
>
>> Not necessarily building wheels but just an .so for local import. But
>> I
>> think your point stands that the same Qt version needs to be installed
>> so
>> that the symbols just resolve.
>>
>> On Tue, Oct 4, 2022 at 1:07 AM Phil Thompson
>> <phil at riverbankcomputing.com>
>> wrote:
>>
>>> On 03/10/2022 22:58, Patrick Stinson wrote:
>>> > Sorry if this has been covered elsewhere, I’ve bee out of the loop for
>>> > a while.
>>> >
>>> > What is the preferred way to build and install a custom sip extension
>>> > that depends on PyQt5 and Qt headers+libs so that it can be imported
>>> > by the python exe? sip-install requires a qmake executable which
>>> > requires separately installing qt headers+libs, but can cause symbol
>>> > conflicts with the qt libs included in the pip-installed PyQt module.
>>> >
>>> > The goal is to understand the qt/pyqt debs required to then simply
>>> > clone my sip modules repo, build+install it, then import it from the
>>> > python bin.
>>>
>>> It's not clear if you want to create .debs for your distro (depending
>>> on
>>> the distro provided PyQt/Qt) or wheels (depending on the PyQt/Qt
>>> wheels
>>> from PyPI).
>>>
>>> Assuming the latter you (probably) need to install the targeted
>>> version
>>> of Qt using the on-line installer. The other PyQt projects (eg.
>>> PyQt6-NetworkAuth to take the smallest) are examples of what you want
>>> to
>>> do.
>>>
>>> Phil
>>>
>>
More information about the PyQt
mailing list