Re: Building the Python binding (with fix)

Denis Corbin <[email protected]> Wed, 21 Jun 2023 22:55:55 +0200
Newsgroups gmane.comp.sysutils.backup.dar.support
Message-ID <[email protected]>
On 21/06/2023 05:23, John Goerzen wrote:
> Hi,

Hi,

> 
> Now that I have uploaded libthreadar, and a version with libthreadar and
> curl enabled to Debian, the last thing I need to get built is the Python
> binding.
> 
> I got that working OK, but:
> 
> $ python3
> Python 3.11.4 (main, Jun  7 2023, 10:13:09) [GCC 12.2.0] on linux
> Type "help", "copyright", "credits" or "license" for more information.
>>>> import libdar
> Traceback (most recent call last):
>    File "<stdin>", line 1, in <module>
> ImportError: /usr/lib/python3/dist-packages/libdar.cpython-311-x86_64-linux-gnu.so: undefined symbol: _ZTIN6libdar16user_interactionE
> 
> That seems to be in libdar64.so.  But, oddly:
> 
>   ldd /usr/lib/python3/dist-packages/libdar.cpython-311-x86_64-linux-gnu.so
>          linux-vdso.so.1 (0x00007ffd60d82000)
>          libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fa98776d000)
>          libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fa987749000)
>          libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa987568000)
>          /lib64/ld-linux-x86-64.so.2 (0x00007fa987b0e000)
>          libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fa987489000)
> 
> Huh.  No reference to libdar64, or to threadar.  Or curl, or tons of
> other things. Odd.

Strange thing...

> 
> It was linked with:
> 
> g++ -shared -L/usr/lib/x86_64-linux-gnu -lgpgme -lcurl  -lthreadar -lpthread ../libdar/.libs/libdar64.so pybind11_libdar.o  -o libdar.cpython-311-x86_64-linux-gnu.so
> 
> On a lark, I tried:
> 
> g++ -shared -Wl,--no-as-needed -L/usr/lib/x86_64-linux-gnu -lgpgme -lcurl  -lthreadar -lpthread ../libdar/.libs/libdar64.so pybind11_libdar.o  -o libdar.cpython-311-x86_64-linux-gnu.so
> 
> Yep, that did it!  It imports in python3, and:
> 
> $ ldd ./libdar.cpython-311-x86_64-linux-gnu.so
>          linux-vdso.so.1 (0x00007fff6a398000)
>          libgpgme.so.11 => /lib/x86_64-linux-gnu/libgpgme.so.11 (0x00007f075b231000)
>          libcurl.so.4 => /lib/x86_64-linux-gnu/libcurl.so.4 (0x00007f075b184000)
>          libthreadar.so.1000 => /lib/x86_64-linux-gnu/libthreadar.so.1000 (0x00007f075b174000)
>          libdar64.so.6000 => /lib/x86_64-linux-gnu/libdar64.so.6000 (0x00007f075aeaa000)
>          libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f075ac54000)
>          libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f075ab73000)
>          libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f075ab4f000)
>          libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f075a96e000)
>          /lib64/ld-linux-x86-64.so.2 (0x00007f075b3d0000)
>          libassuan.so.0 => /lib/x86_64-linux-gnu/libassuan.so.0 (0x00007f075a958000)
>          libgpg-error.so.0 => /lib/x86_64-linux-gnu/libgpg-error.so.0 (0x00007f075a930000)
>          libnghttp2.so.14 => /lib/x86_64-linux-gnu/libnghttp2.so.14 (0x00007f075a901000)
>          libidn2.so.0 => /lib/x86_64-linux-gnu/libidn2.so.0 (0x00007f075a8ce000)
>          librtmp.so.1 => /lib/x86_64-linux-gnu/librtmp.so.1 (0x00007f075a8af000)
>          libssh2.so.1 => /lib/x86_64-linux-gnu/libssh2.so.1 (0x00007f075a86e000)
>          libpsl.so.5 => /lib/x86_64-linux-gnu/libpsl.so.5 (0x00007f075a85a000)
>          libssl.so.3 => /lib/x86_64-linux-gnu/libssl.so.3 (0x00007f075a7b1000)
>          libcrypto.so.3 => /lib/x86_64-linux-gnu/libcrypto.so.3 (0x00007f075a330000)
>          libgssapi_krb5.so.2 => /lib/x86_64-linux-gnu/libgssapi_krb5.so.2 (0x00007f075a2dc000)
>          libldap-2.5.so.0 => /lib/x86_64-linux-gnu/libldap-2.5.so.0 (0x00007f075a27d000)
>          liblber-2.5.so.0 => /lib/x86_64-linux-gnu/liblber-2.5.so.0 (0x00007f075a26d000)
>          libzstd.so.1 => /lib/x86_64-linux-gnu/libzstd.so.1 (0x00007f075a1b1000)
>          libbrotlidec.so.1 => /lib/x86_64-linux-gnu/libbrotlidec.so.1 (0x00007f075a1a4000)
>          libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f075a185000)
>          libargon2.so.1 => /lib/x86_64-linux-gnu/libargon2.so.1 (0x00007f075a179000)
>          librsync.so.2 => /lib/x86_64-linux-gnu/librsync.so.2 (0x00007f075a16b000)
>          libgcrypt.so.20 => /lib/x86_64-linux-gnu/libgcrypt.so.20 (0x00007f075a025000)
>          liblz4.so.1 => /lib/x86_64-linux-gnu/liblz4.so.1 (0x00007f0759fff000)
>          liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007f0759fd0000)
>          liblzo2.so.2 => /lib/x86_64-linux-gnu/liblzo2.so.2 (0x00007f0759fa9000)
>          libbz2.so.1.0 => /lib/x86_64-linux-gnu/libbz2.so.1.0 (0x00007f0759f96000)
>          libcap.so.2 => /lib/x86_64-linux-gnu/libcap.so.2 (0x00007f0759f8a000)
>          libunistring.so.2 => /lib/x86_64-linux-gnu/libunistring.so.2 (0x00007f0759dd4000)
>          libgnutls.so.30 => /lib/x86_64-linux-gnu/libgnutls.so.30 (0x00007f0759bb8000)
>          libhogweed.so.6 => /lib/x86_64-linux-gnu/libhogweed.so.6 (0x00007f0759b6d000)
>          libnettle.so.8 => /lib/x86_64-linux-gnu/libnettle.so.8 (0x00007f0759b1f000)
>          libgmp.so.10 => /lib/x86_64-linux-gnu/libgmp.so.10 (0x00007f0759a9e000)
>          libkrb5.so.3 => /lib/x86_64-linux-gnu/libkrb5.so.3 (0x00007f07599c4000)
>          libk5crypto.so.3 => /lib/x86_64-linux-gnu/libk5crypto.so.3 (0x00007f0759997000)
>          libcom_err.so.2 => /lib/x86_64-linux-gnu/libcom_err.so.2 (0x00007f075998f000)
>          libkrb5support.so.0 => /lib/x86_64-linux-gnu/libkrb5support.so.0 (0x00007f0759981000)
>          libsasl2.so.2 => /lib/x86_64-linux-gnu/libsasl2.so.2 (0x00007f0759964000)
>          libbrotlicommon.so.1 => /lib/x86_64-linux-gnu/libbrotlicommon.so.1 (0x00007f0759941000)
>          libb2.so.1 => /lib/x86_64-linux-gnu/libb2.so.1 (0x00007f0759922000)
>          libp11-kit.so.0 => /lib/x86_64-linux-gnu/libp11-kit.so.0 (0x00007f07597ec000)
>          libtasn1.so.6 => /lib/x86_64-linux-gnu/libtasn1.so.6 (0x00007f07597d7000)
>          libkeyutils.so.1 => /lib/x86_64-linux-gnu/libkeyutils.so.1 (0x00007f07597d0000)
>          libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007f07597bf000)
>          libgomp.so.1 => /lib/x86_64-linux-gnu/libgomp.so.1 (0x00007f075976e000)
>          libffi.so.8 => /lib/x86_64-linux-gnu/libffi.so.8 (0x00007f0759760000)
> 
> So now the question is:
> 
> 1) How did this work for you/others?

I got the same error on a Devuan VM...

> 
> 2) Would you like to add this -Wl,--no-as-needed to the build system
> yourself, or should I patch that locally for Debian?

Let me a few days for I find more time to investigate on that...

> 
> Thanks!
> 
> - John
> 

Keep you informed.
Denis
OpenPGP_signature (application/pgp-signature, 840 B) - not displayed