You are not logged in.

#1 2022-11-07 12:55:20

bertulli
Member
Registered: 2021-11-25
Posts: 48

[SOLVED] How to solve dynamic libraries dependency with AUR packages?

Hi all!

I'm trying to grasp what is the correct way to handle dynamic library dependencies when installing packages from AUR. Specifically, I have installed from AUR openboard. It works nicely, but very often when I upgrade my system (pacman -Syu) some libraries get upgraded, and launching Openboard gives me

[alessandro@commodoroII ~]$ openboard 
openboard: error while loading shared libraries: libcrypto.so.1.1: cannot open shared object file: No such file or directory

For completeness, here are the other libraries:

[alessandro@commodoroII ~]$ ldd openboard
ldd: ./openboard: No such file or directory
[alessandro@commodoroII ~]$ ldd `which openboard`
	linux-vdso.so.1 (0x00007ffd188f7000)
	libavformat.so.58 => /usr/lib/libavformat.so.58 (0x00007feedeb03000)
	libavcodec.so.58 => /usr/lib/libavcodec.so.58 (0x00007feedd68b000)
	libswresample.so.3 => /usr/lib/libswresample.so.3 (0x00007feedd66c000)
	libswscale.so.5 => /usr/lib/libswscale.so.5 (0x00007feedd5d8000)
	libavutil.so.56 => /usr/lib/libavutil.so.56 (0x00007feedd32d000)
	libz.so.1 => /usr/lib/libz.so.1 (0x00007feedd313000)
	libcrypto.so.1.1 => not found
	libX11.so.6 => /usr/lib/libX11.so.6 (0x00007feedd1ce000)
	libquazip1-qt5.so.1.3.0 => /usr/lib/libquazip1-qt5.so.1.3.0 (0x00007feedd198000)
	libpoppler.so.125 => /usr/lib/libpoppler.so.125 (0x00007feedcddb000)
	libQt5WebKitWidgets.so.5 => /usr/lib/libQt5WebKitWidgets.so.5 (0x00007feedcd8b000)
	libQt5WebKit.so.5 => /usr/lib/libQt5WebKit.so.5 (0x00007feed9ec0000)
	libQt5Svg.so.5 => /usr/lib/libQt5Svg.so.5 (0x00007feed9e65000)
	libQt5MultimediaWidgets.so.5 => /usr/lib/libQt5MultimediaWidgets.so.5 (0x00007feed9e46000)
	libQt5PrintSupport.so.5 => /usr/lib/libQt5PrintSupport.so.5 (0x00007feed9dd6000)
	libQt5Widgets.so.5 => /usr/lib/libQt5Widgets.so.5 (0x00007feed971c000)
	libQt5Multimedia.so.5 => /usr/lib/libQt5Multimedia.so.5 (0x00007feed961c000)
	libQt5Gui.so.5 => /usr/lib/libQt5Gui.so.5 (0x00007feed8fb5000)
	libQt5Network.so.5 => /usr/lib/libQt5Network.so.5 (0x00007feed8e42000)
	libQt5Xml.so.5 => /usr/lib/libQt5Xml.so.5 (0x00007feed8e00000)
	libQt5Concurrent.so.5 => /usr/lib/libQt5Concurrent.so.5 (0x00007feed8df8000)
	libQt5Core.so.5 => /usr/lib/libQt5Core.so.5 (0x00007feed88d6000)
	libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007feed869f000)
	libm.so.6 => /usr/lib/libm.so.6 (0x00007feed85b7000)
	libgomp.so.1 => /usr/lib/libgomp.so.1 (0x00007feed856c000)
	libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007feed854c000)
	libc.so.6 => /usr/lib/libc.so.6 (0x00007feed8365000)
	libxml2.so.2 => /usr/lib/libxml2.so.2 (0x00007feed81fd000)
	libbz2.so.1.0 => /usr/lib/libbz2.so.1.0 (0x00007feed81ea000)
	libmodplug.so.1 => /usr/lib/libmodplug.so.1 (0x00007feed805a000)
	libbluray.so.2 => /usr/lib/libbluray.so.2 (0x00007feed7ffb000)
	libgmp.so.10 => /usr/lib/libgmp.so.10 (0x00007feed7f58000)
	libgnutls.so.30 => /usr/lib/libgnutls.so.30 (0x00007feed7d55000)
	libsrt.so.1.5 => /usr/lib/libsrt.so.1.5 (0x00007feed7c8d000)
	libssh.so.4 => /usr/lib/libssh.so.4 (0x00007feed7c21000)
	libvpx.so.7 => /usr/lib/libvpx.so.7 (0x00007feed795c000)
	libwebpmux.so.3 => /usr/lib/libwebpmux.so.3 (0x00007feed794d000)
	libwebp.so.7 => /usr/lib/libwebp.so.7 (0x00007feed78dc000)
	liblzma.so.5 => /usr/lib/liblzma.so.5 (0x00007feed78b2000)
	libdav1d.so.6 => /usr/lib/libdav1d.so.6 (0x00007feed76e9000)
	libopencore-amrwb.so.0 => /usr/lib/libopencore-amrwb.so.0 (0x00007feed76d3000)
	librsvg-2.so.2 => /usr/lib/librsvg-2.so.2 (0x00007feed6e14000)
	libgobject-2.0.so.0 => /usr/lib/libgobject-2.0.so.0 (0x00007feed6db1000)
	libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0x00007feed6c72000)
	libcairo.so.2 => /usr/lib/libcairo.so.2 (0x00007feed6b4e000)
	libaom.so.3 => /usr/lib/libaom.so.3 (0x00007feed6291000)
	libgsm.so.1 => /usr/lib/libgsm.so.1 (0x00007feed6282000)
	libmp3lame.so.0 => /usr/lib/libmp3lame.so.0 (0x00007feed620a000)
	libopencore-amrnb.so.0 => /usr/lib/libopencore-amrnb.so.0 (0x00007feed61df000)
	libopenjp2.so.7 => /usr/lib/libopenjp2.so.7 (0x00007feed6173000)
	libopus.so.0 => /usr/lib/libopus.so.0 (0x00007feed6119000)
	librav1e.so.0 => /usr/lib/librav1e.so.0 (0x00007feed5e89000)
	libspeex.so.1 => /usr/lib/libspeex.so.1 (0x00007feed5e6c000)
	libSvtAv1Enc.so.1 => /usr/lib/libSvtAv1Enc.so.1 (0x00007feecd600000)
	libtheoraenc.so.1 => /usr/lib/libtheoraenc.so.1 (0x00007feecd5c5000)
	libtheoradec.so.1 => /usr/lib/libtheoradec.so.1 (0x00007feecd5ac000)
	libvorbis.so.0 => /usr/lib/libvorbis.so.0 (0x00007feecd57e000)
	libvorbisenc.so.2 => /usr/lib/libvorbisenc.so.2 (0x00007feecd4d3000)
	libx264.so.164 => /usr/lib/libx264.so.164 (0x00007feecd20c000)
	libx265.so.199 => /usr/lib/libx265.so.199 (0x00007feecbf3b000)
	libxvidcore.so.4 => /usr/lib/libxvidcore.so.4 (0x00007feecbe2a000)
	libva.so.2 => /usr/lib/libva.so.2 (0x00007feecbdfa000)
	libmfx.so.1 => /usr/lib/libmfx.so.1 (0x00007feecbdec000)
	libsoxr.so.0 => /usr/lib/libsoxr.so.0 (0x00007feecbd6a000)
	libva-drm.so.2 => /usr/lib/libva-drm.so.2 (0x00007feecbd65000)
	libva-x11.so.2 => /usr/lib/libva-x11.so.2 (0x00007feecbd5b000)
	libvdpau.so.1 => /usr/lib/libvdpau.so.1 (0x00007feecbd56000)
	libdrm.so.2 => /usr/lib/libdrm.so.2 (0x00007feecbd40000)
	libxcb.so.1 => /usr/lib/libxcb.so.1 (0x00007feecbd15000)
	libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x00007feecbc46000)
	libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0x00007feecbbf8000)
	libjpeg.so.8 => /usr/lib/libjpeg.so.8 (0x00007feecbb73000)
	libcurl.so.4 => /usr/lib/libcurl.so.4 (0x00007feecbacb000)
	liblcms2.so.2 => /usr/lib/liblcms2.so.2 (0x00007feecba65000)
	libpng16.so.16 => /usr/lib/libpng16.so.16 (0x00007feecba2c000)
	libtiff.so.5 => /usr/lib/libtiff.so.5 (0x00007feecb997000)
	libsmime3.so => /usr/lib/libsmime3.so (0x00007feecb96f000)
	libnss3.so => /usr/lib/libnss3.so (0x00007feecb838000)
	libplc4.so => /usr/lib/libplc4.so (0x00007feecb831000)
	libnspr4.so => /usr/lib/libnspr4.so (0x00007feecb7f0000)
	/lib64/ld-linux-x86-64.so.2 => /usr/lib64/ld-linux-x86-64.so.2 (0x00007feedf2ee000)
	libQt5Quick.so.5 => /usr/lib/libQt5Quick.so.5 (0x00007feecb2b5000)
	libQt5WebChannel.so.5 => /usr/lib/libQt5WebChannel.so.5 (0x00007feecb28d000)
	libicuuc.so.72 => /usr/lib/libicuuc.so.72 (0x00007feecb08a000)
	libQt5Positioning.so.5 => /usr/lib/libQt5Positioning.so.5 (0x00007feecb028000)
	libicui18n.so.72 => /usr/lib/libicui18n.so.72 (0x00007feecacf7000)
	libQt5Sensors.so.5 => /usr/lib/libQt5Sensors.so.5 (0x00007feecacb8000)
	libwoff2dec.so.1.0.2 => /usr/lib/libwoff2dec.so.1.0.2 (0x00007feecacab000)
	libhyphen.so.0 => /usr/lib/libhyphen.so.0 (0x00007feecaca4000)
	libxslt.so.1 => /usr/lib/libxslt.so.1 (0x00007feecac61000)
	libsqlite3.so.0 => /usr/lib/libsqlite3.so.0 (0x00007feecab16000)
	libgio-2.0.so.0 => /usr/lib/libgio-2.0.so.0 (0x00007feeca948000)
	libgstapp-1.0.so.0 => /usr/lib/libgstapp-1.0.so.0 (0x00007feeca933000)
	libgstbase-1.0.so.0 => /usr/lib/libgstbase-1.0.so.0 (0x00007feeca8af000)
	libgstreamer-1.0.so.0 => /usr/lib/libgstreamer-1.0.so.0 (0x00007feeca760000)
	libgstpbutils-1.0.so.0 => /usr/lib/libgstpbutils-1.0.so.0 (0x00007feeca71e000)
	libgstaudio-1.0.so.0 => /usr/lib/libgstaudio-1.0.so.0 (0x00007feeca69c000)
	libgsttag-1.0.so.0 => /usr/lib/libgsttag-1.0.so.0 (0x00007feeca65d000)
	libgstvideo-1.0.so.0 => /usr/lib/libgstvideo-1.0.so.0 (0x00007feeca598000)
	libgstfft-1.0.so.0 => /usr/lib/libgstfft-1.0.so.0 (0x00007feeca58c000)
	libQt5Qml.so.5 => /usr/lib/libQt5Qml.so.5 (0x00007feeca187000)
	libGL.so.1 => /usr/lib/libGL.so.1 (0x00007feeca0ff000)
	libpulse.so.0 => /usr/lib/libpulse.so.0 (0x00007feeca0aa000)
	libharfbuzz.so.0 => /usr/lib/libharfbuzz.so.0 (0x00007feec9fbe000)
	libmd4c.so.0 => /usr/lib/libmd4c.so.0 (0x00007feec9fa8000)
	libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0x00007feec9f54000)
	libssl.so.3 => /usr/lib/libssl.so.3 (0x00007feec9eb2000)
	libcrypto.so.3 => /usr/lib/libcrypto.so.3 (0x00007feec9a67000)
	libsystemd.so.0 => /usr/lib/libsystemd.so.0 (0x00007feec998a000)
	libdouble-conversion.so.3 => /usr/lib/libdouble-conversion.so.3 (0x00007feec9974000)
	libpcre2-16.so.0 => /usr/lib/libpcre2-16.so.0 (0x00007feec98e6000)
	libzstd.so.1 => /usr/lib/libzstd.so.1 (0x00007feec983d000)
	libp11-kit.so.0 => /usr/lib/libp11-kit.so.0 (0x00007feec9708000)
	libbrotlienc.so.1 => /usr/lib/libbrotlienc.so.1 (0x00007feec9663000)
	libbrotlidec.so.1 => /usr/lib/libbrotlidec.so.1 (0x00007feec9655000)
	libidn2.so.0 => /usr/lib/libidn2.so.0 (0x00007feec9608000)
	libunistring.so.2 => /usr/lib/libunistring.so.2 (0x00007feec945c000)
	libtasn1.so.6 => /usr/lib/libtasn1.so.6 (0x00007feec9443000)
	libnettle.so.8 => /usr/lib/libnettle.so.8 (0x00007feec93ef000)
	libhogweed.so.6 => /usr/lib/libhogweed.so.6 (0x00007feec93a6000)
	libcairo-gobject.so.2 => /usr/lib/libcairo-gobject.so.2 (0x00007feec939a000)
	libgdk_pixbuf-2.0.so.0 => /usr/lib/libgdk_pixbuf-2.0.so.0 (0x00007feec9354000)
	libpangocairo-1.0.so.0 => /usr/lib/libpangocairo-1.0.so.0 (0x00007feec9342000)
	libpango-1.0.so.0 => /usr/lib/libpango-1.0.so.0 (0x00007feec92da000)
	libffi.so.8 => /usr/lib/libffi.so.8 (0x00007feec92cf000)
	libpcre2-8.so.0 => /usr/lib/libpcre2-8.so.0 (0x00007feec9234000)
	libXext.so.6 => /usr/lib/libXext.so.6 (0x00007feec921f000)
	libXrender.so.1 => /usr/lib/libXrender.so.1 (0x00007feec9212000)
	libxcb-render.so.0 => /usr/lib/libxcb-render.so.0 (0x00007feec9200000)
	libxcb-shm.so.0 => /usr/lib/libxcb-shm.so.0 (0x00007feec91fb000)
	libpixman-1.so.0 => /usr/lib/libpixman-1.so.0 (0x00007feec914e000)
	libogg.so.0 => /usr/lib/libogg.so.0 (0x00007feec9143000)
	libmvec.so.1 => /usr/lib/libmvec.so.1 (0x00007feec9049000)
	libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007feec9042000)
	libXfixes.so.3 => /usr/lib/libXfixes.so.3 (0x00007feec9039000)
	libXau.so.6 => /usr/lib/libXau.so.6 (0x00007feec9034000)
	libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x00007feec902c000)
	libexpat.so.1 => /usr/lib/libexpat.so.1 (0x00007feec9001000)
	libnghttp2.so.14 => /usr/lib/libnghttp2.so.14 (0x00007feec8fd3000)
	libssh2.so.1 => /usr/lib/libssh2.so.1 (0x00007feec8f91000)
	libpsl.so.5 => /usr/lib/libpsl.so.5 (0x00007feec8f7e000)
	libnssutil3.so => /usr/lib/libnssutil3.so (0x00007feec8f4c000)
	libplds4.so => /usr/lib/libplds4.so (0x00007feec8f47000)
	libQt5QmlModels.so.5 => /usr/lib/libQt5QmlModels.so.5 (0x00007feec8ec4000)
	libicudata.so.72 => /usr/lib/libicudata.so.72 (0x00007feec70f4000)
	libwoff2common.so.1.0.2 => /usr/lib/libwoff2common.so.1.0.2 (0x00007feec70ef000)
	libgmodule-2.0.so.0 => /usr/lib/libgmodule-2.0.so.0 (0x00007feec70e8000)
	libmount.so.1 => /usr/lib/libmount.so.1 (0x00007feec70a4000)
	libunwind.so.8 => /usr/lib/libunwind.so.8 (0x00007feec7088000)
	libdw.so.1 => /usr/lib/libdw.so.1 (0x00007feec6ff2000)
	liborc-0.4.so.0 => /usr/lib/liborc-0.4.so.0 (0x00007feec6f58000)
	libGLdispatch.so.0 => /usr/lib/libGLdispatch.so.0 (0x00007feec6ea0000)
	libGLX.so.0 => /usr/lib/libGLX.so.0 (0x00007feec6e6e000)
	libpulsecommon-16.1.so => /usr/lib/pulseaudio/libpulsecommon-16.1.so (0x00007feec6de5000)
	libdbus-1.so.3 => /usr/lib/libdbus-1.so.3 (0x00007feec6d94000)
	libgraphite2.so.3 => /usr/lib/libgraphite2.so.3 (0x00007feec6d72000)
	libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0x00007feec6c9a000)
	libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0x00007feec6c6c000)
	libcom_err.so.2 => /usr/lib/libcom_err.so.2 (0x00007feec6c66000)
	libkrb5support.so.0 => /usr/lib/libkrb5support.so.0 (0x00007feec6c56000)
	libkeyutils.so.1 => /usr/lib/libkeyutils.so.1 (0x00007feec6c4f000)
	libresolv.so.2 => /usr/lib/libresolv.so.2 (0x00007feec6c3d000)
	libcap.so.2 => /usr/lib/libcap.so.2 (0x00007feec6c31000)
	libgcrypt.so.20 => /usr/lib/libgcrypt.so.20 (0x00007feec6ae8000)
	liblz4.so.1 => /usr/lib/liblz4.so.1 (0x00007feec6ac6000)
	libdl.so.2 => /usr/lib/libdl.so.2 (0x00007feec6abf000)
	libbrotlicommon.so.1 => /usr/lib/libbrotlicommon.so.1 (0x00007feec6a9c000)
	libpangoft2-1.0.so.0 => /usr/lib/libpangoft2-1.0.so.0 (0x00007feec6a84000)
	libfribidi.so.0 => /usr/lib/libfribidi.so.0 (0x00007feec6a64000)
	libthai.so.0 => /usr/lib/libthai.so.0 (0x00007feec6a59000)
	libblkid.so.1 => /usr/lib/libblkid.so.1 (0x00007feec6a1e000)
	libelf.so.1 => /usr/lib/libelf.so.1 (0x00007feec6a03000)
	libsndfile.so.1 => /usr/lib/libsndfile.so.1 (0x00007feec6982000)
	libasyncns.so.0 => /usr/lib/libasyncns.so.0 (0x00007feec697a000)
	libgpg-error.so.0 => /usr/lib/libgpg-error.so.0 (0x00007feec6952000)
	libdatrie.so.1 => /usr/lib/libdatrie.so.1 (0x00007feec6948000)
	libFLAC.so.12 => /usr/lib/libFLAC.so.12 (0x00007feec6905000)
  1. Tell me if I am right: what happened is that the library (libcrypto in this case) was upgraded; Openboard was compiled against an earlier version; now when it tries to start it can't find the right version of the library. Is this correct?

  2. Rebuilding the package (git clean + makepkg) solves the issue. However this is very tedious, because I need to recompile all the package, and it takes some time. What is the "best" way to act on this?. On the top of my mind I see two possibilities:

    • Using something like Ccache to cache compilation, and always proceed with the recipe "git clean + makepkg"

    • Manually rewire the libraries, moving/deleting/creating symlinks. But I don't remember where should I search for the libraries to link, nor which symlinks should I delete

Are there other possibilities? What is the usual/idiomatic way to proceed in these cases?

Moreover, bonus points:

  • Can you please explain why is recompilation necessary? If the library is dynamic, shouldn't the program get linked to the new version at load time?

  • Is Ccache the usual way to speed up compilation from AUR, or does it exist a built-in solution?

  • If I try to 'makepkg -f' without first cleaning, I get errors because the PKGBUILD first applies some patches. Is this inevitable, or can the patches be instructed to not trying re-application?

Thanks!

Last edited by bertulli (2022-11-11 14:20:24)


We are still learning
    - wise people

Offline

#2 2022-11-07 13:04:51

Scimmia
Fellow
Registered: 2012-09-01
Posts: 13,729

Re: [SOLVED] How to solve dynamic libraries dependency with AUR packages?

1. Yes, that's correct.
2. Rebuilding *is* the correct way.

first bullet point: Library names change when the ABI and/or API become incompatible with the previous version. There are a lot of updates where the library name (soname) doesn't change because it's compatible.
third bullet point: patch has an -N option.

Offline

#3 2022-11-07 14:01:12

Trilby
Inspector Parrot
Registered: 2011-11-29
Posts: 30,480
Website

Re: [SOLVED] How to solve dynamic libraries dependency with AUR packages?

Or, for the third bullet, makepkg has the -e flag.


"UNIX is simple and coherent" - Dennis Ritchie; "GNU's Not Unix" - Richard Stallman

Offline

#4 2022-11-08 19:10:11

bertulli
Member
Registered: 2021-11-25
Posts: 48

Re: [SOLVED] How to solve dynamic libraries dependency with AUR packages?

Thanks to both! Last thing: is Ccache the usual way, or there exist, say, a built in solution?


We are still learning
    - wise people

Offline

#5 2022-11-10 17:16:18

Lone_Wolf
Administrator
From: Netherlands, Europe
Registered: 2005-10-04
Posts: 15,162

Re: [SOLVED] How to solve dynamic libraries dependency with AUR packages?

ccache is used by many (and is supported by makepkg in a transparant way), but there are some other options .

check https://wiki.archlinux.org/title/Makepk … pile_times .


Disliking systemd intensely, but not satisfied with alternatives so focusing on taming systemd.

clean chroot building not flexible enough ?
Try clean chroot manager by graysky

Offline

#6 2022-11-10 19:34:53

Trilby
Inspector Parrot
Registered: 2011-11-29
Posts: 30,480
Website

Re: [SOLVED] How to solve dynamic libraries dependency with AUR packages?

Ccache only seems relevant if one does not keep the previously-used build folder around which the OP does.  If you just rebuild an existing package (with the -ef flags) then there is no need for ccache as all the object files are already there under the src directory and `make` or similar build tools will not recompile but just relink object files against the new libs.


"UNIX is simple and coherent" - Dennis Ritchie; "GNU's Not Unix" - Richard Stallman

Offline

#7 2022-11-11 14:20:53

bertulli
Member
Registered: 2021-11-25
Posts: 48

Re: [SOLVED] How to solve dynamic libraries dependency with AUR packages?

Thanks to both! I'll investigate your suggestions. smile


We are still learning
    - wise people

Offline

Board footer

Powered by FluxBB