You are not logged in.
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 directoryFor 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)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?
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
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
Or, for the third bullet, makepkg has the -e flag.
"UNIX is simple and coherent" - Dennis Ritchie; "GNU's Not Unix" - Richard Stallman
Offline
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
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
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
Thanks to both! I'll investigate your suggestions. ![]()
We are still learning
- wise people
Offline