My dynamic loader refuses to load libQt5Core because of the ABI tag note

Carlos O'Donell carlos@redhat.com
Thu Oct 7 19:14:48 GMT 2021


Second time around, forgot to TO libc-help.

On 10/7/21 14:47, Krzysztof Żelechowski via Libc-help wrote:
> /usr/lib/YaST2/bin/y2controlcenter
>                 /usr/lib/YaST2/bin/y2controlcenter: error while loading shared libraries: libQt5Core.so.5: cannot open shared object file: No such file or directory

This kind of question needs to be raised with the distribution maintainer since they
are responsible for providing the libraries required to run core applications (usually
OpenSUSE or SUSE) like YaST.

What does 'readelf -a -W /usr/lib/YaST2/bin/y2controlcenter' return?

Alternatively run with:

LD_DEBUG_OUTPUT=/tmp/y2cc LD_DEBUG=all /usr/lib/YaST2/bin/y2controlcenter

Then you'll find /tmp/y2cc.$PID with the details from the dynamic loader operations
that were taken to try find the DSO. This should give you further information to
try track down what is broken or missing (is there a DT_RPATH, or DT_RUNPATH, or other
that is getting in the way).

> uname -r
>                 4.4.0-19041-Microsoft

This looks like WSL2 running a specific Microsoft Linux kernel.

> ldd /usr/lib64/libQt5Widgets.so.5
> libQt5Core.so.5 => not found
> /usr/lib64/libQt5Core.so.5
>                 This is the QtCore library version Qt 5.12.7 (x86_64-little_endian-lp64 shared (dynamic) release build; by GCC 7.5.0)
> Copyright (C) 2016 The Qt Company Ltd.
> Contact: http://www.qt.io/licensing/
>
> Installation prefix: /usr
> Library path:        lib64
> Include path:        include/qt5
> Processor features:  sse2[required] sse3 ssse3 fma sse4.1 sse4.2 movbe popcnt aes avx f16c rdrnd bmi avx2 bmi2 rdseed sha
> readelf -n /usr/lib64/libQt5Core.so.5
> Displaying notes found in: .note.ABI-tag
>   Owner                Data size        Description
>   GNU                  0x00000010       NT_GNU_ABI_TAG (ABI version tag)
>     OS: Linux, ABI: 3.17.0

That's OK, this just means you need a Linux Kernel 3.17.0 to run and you have that.

The only possible problem is if the kernel exposes a vDSO with a Linux note that has
an *old* version in it. You can dump the vDSO with gdb and examine it.

Likewise uname() might return something odd. I haven't tested. You could check with
a small program what uname() returns?

What does `cat /proc/sys/kernel/osrelease` print?

> objcopy -R .note.ABI-tag /usr/lib64/libQt5Core.so.5 /tmp/libQt5Core.so.5
> LD_LIBRARY_PATH=/tmp /usr/lib/YaST2/bin/y2controlcenter

Does this actually work?

> Please note that the error message "No such file or directory" is as misleading as can be.
 
Yes, in some cases the "unloadable file" ends up with "No such file or directory"

I agree we could do better for a diagnostic in this case.

-- 
Cheers,
Carlos.



More information about the Libc-help mailing list