On Saturday 2022-07-23 16:32, Nicolas George wrote: > >No, the ELF symbol version system cannot prevent you from replacing a >file with an older version.
The information in ELF helps package managers prevent such replacement. If I even try as much as propose a glibc downgrade to rpm, this will happen: # rpm -Uhv glibc-2.31-7.30.x86_64.rpm --oldpackage error: Failed dependencies: libc.so.6(GLIBC_2.32)(64bit) is needed by (installed) coreutils-9.0-7.1.x86_64 libc.so.6(GLIBC_2.33)(64bit) is needed by (installed) libpmem1-1.11.1-1.5.x86_64 libc.so.6(GLIBC_2.34)(64bit) is needed by (installed) libvpx7-1.11.0-3.4.x86_64 libm.so.6(GLIBC_2.35)(64bit) is needed by (installed) perl-base-5.36.0-2.1.x86_64 Of course, you can always mv/rm behind the manager's back or use rpm --force, but that's not the point! At the time vpx was built, it engrained the symvers of the functions it uses into itself, therefore e.g. `readelf -aW /usr/lib64/libvpx.so.7`: Version symbols section '.gnu.version' contains 93 entries: Addr: 0x0000000000001576 Offset: 0x001576 Link: 4 (.dynsym) 000: 0 (*local*) 2 (GLIBC_2.2.5) 3 (GLIBC_2.34) 4 (GLIBC_2.3.2) 004: 5 (GLIBC_2.2.5) 6 (GLIBC_2.11) 5 (GLIBC_2.2.5) 7 (GLIBC_2.29) 008: 8 (GLIBC_2.3.4) 1 (*global*) 5 (GLIBC_2.2.5) 4 (GLIBC_2.3.2) 00c: 8 (GLIBC_2.3.4) 5 (GLIBC_2.2.5) 3 (GLIBC_2.34) 5 (GLIBC_2.2.5) 010: 3 (GLIBC_2.34) 9 (GLIBC_2.27) 8 (GLIBC_2.3.4) 5 (GLIBC_2.2.5) 014: 3 (GLIBC_2.34) 5 (GLIBC_2.2.5) 8 (GLIBC_2.3.4) 1 (*global*) 018: 3 (GLIBC_2.34) 7 (GLIBC_2.29) 5 (GLIBC_2.2.5) 1 (*global*) 01c: 4 (GLIBC_2.3.2) 5 (GLIBC_2.2.5) 3 (GLIBC_2.34) 5 (GLIBC_2.2.5) 020: 5 (GLIBC_2.2.5) 5 (GLIBC_2.2.5) 3 (GLIBC_2.34) 5 (GLIBC_2.2.5) 024: a (GLIBC_2.4) 8 (GLIBC_2.3.4) 4 (GLIBC_2.3.2) 5 (GLIBC_2.2.5) 028: 5 (GLIBC_2.2.5) 2 (GLIBC_2.2.5) 5 (GLIBC_2.2.5) 5 (GLIBC_2.2.5) 02c: 5 (GLIBC_2.2.5) 4 (GLIBC_2.3.2) 3 (GLIBC_2.34) 7 (GLIBC_2.29) 030: 2 (GLIBC_2.2.5) 5 (GLIBC_2.2.5) 5 (GLIBC_2.2.5) b (GLIBC_2.14) 034: 1 (*global*) 1 (*global*) 1 (*global*) 1 (*global*) Managers can and do evaluate that and turn that into a dependency *without any person having to manually add "Requires: glibc >= 2.34" to the libvpx description*. This of course requires that the project followed the procedures to create the symvers definitions, which glibc did. Seriously, why do I have to explain this all the time. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".