Description
This bug was originally reported in Fedora, but I was asked to report it upstream by Fedora maintainer.
Description of problem:
Fedora 40 build of libsigc++20 is missing the sigc::internal::signal_impl::unreference_exec()
symbol. This causes some third-party proprietary applications (like Horizon Client) to segfault because they refer to and expect that symbol to be present.
Version-Release number of selected component (if applicable):
libsigc++20-2.12.1-2.fc40.x86_64
How reproducible:
Always
Steps to Reproduce:
- Download Debian build from https://packages.debian.org/sid/amd64/libsigc++-2.0-0v5/download
- Extract the libsigc-2.0.so.0.0.0 shared library
dnf install libsigc++20
abidiff libsigc-2.0.so.0.0.0 /usr/lib64/libsigc-2.0.so.0.0.0 |c++filt
Actual results:
Functions changes summary: 0 Removed, 0 Changed, 0 Added function
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
Function symbols changes summary: 1 Removed, 0 Added function symbol not referenced by debug info
Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referenced by debug info
1 Removed function symbol not referenced by debug info:
[D] sigc::internal::signal_impl::unreference_exec()
Expected results:
No ABI difference.
Additional info:
This affects all Fedora releases, including rawhide. Ubuntu package (https://packages.ubuntu.com/noble/libsigc++-2.0-0v5) has the same issue. RHEL9 package libsigc++20-2.10.7-2.el9 has the same issue. Oddly, RHEL8's 2.10.0-6.el8 does have this symbol and a bunch of others, too.
I suspect compiler and/or linker issue. The compiler versions are as follows:
Distro | GCC |
---|---|
Fedora 40, 41 and rawhide | 14.2.1 |
Fedora 39 | 13.3.1 |
RHEL9 | 11.5.0 |
RHEL8 | 8.5.0 |
Ubuntu 24.04 | 14.2.0 |
Debian unstable (Sid) | 14.2.0 |
There seem to be some differences in how Debian and Fedora build libsigc++20. Debian has this in their rules file:
export DEB_BUILD_MAINT_OPTIONS = hardening=+all
export DEB_LDFLAGS_MAINT_APPEND = -Wl,-O1 -Wl,-z,defs
%:
dh $@ --buildsystem=meson --without autoreconf
override_dh_auto_configure:
dh_auto_configure -- \
-Dmaintainer-mode=true \
-Dwarnings=max \
-Dbuild-documentation=true
while Fedora simply does this:
%build
%meson -Dbuild-documentation=true
%meson_build