conda-forge / conda-forge/python-feedstock

libpython-static 3.12.12 (linux-64): static linking fails with “undefined reference to __warn_memset_zero_len” from pystrtod.o when using conda GCC 14 + sysroot_linux-64=2.28

Abierto
#832 0 comentarios 0 reacciones 0 asignados Ver en GitHub
bug
Lenguaje dominante
Shell
Estrellas
47
Forks
112
Merge medio
2 d 9 h
PR fusionados (30 d)
18

Descripción

### Solution to issue cannot be found in the documentation.

- [x] I checked the documentation.

### Issue

When statically linking against libpython3.12.a (from libpython-static 3.12.12, conda‑forge), the final link step fails with:

```
.../lib/libpython3.12.a(pystrtod.o): in function `memset':
.../sysroot/usr/include/bits/string3.h:81:(.text.hot.PyOS_double_to_string+0x1b0):
undefined reference to `__warn_memset_zero_len'
collect2: error: ld returned 1 exit status
```

This is a FORTIFY header diagnostic that should have been optimized away at compile time. The __warn_memset_zero_len symbol is intentionally not provided by glibc at link/run time. If the reference survives into a static object, static linking fails (rare but known behavior of older FORTIFY header paths).

**Why this looks like a packaging/toolchain regression**

- With Python 3.12.11 (conda‑forge) + GCC 13.3, the exact same code path only produced a linker warning memset used with constant zero length parameter and produced a working binary. (We have a working build log that shows the warning from bits/string3.h.)
- After upgrading to Python 3.12.12 (conda‑forge) together with conda GCC 14.3 + Binutils 2.44 and sysroot_linux-64=2.28, the same build now fails in the final link step with an undefined reference to __warn_memset_zero_len. The environment/lockfiles and install logs confirm the toolchain (GCC 14.3, Binutils 2.44, sysroot 2.28).

**Environment (minimal relevant pieces)**

- Platform: linux-64
- libpython-static: 3.12.12 (conda‑forge)
- Toolchain: gcc_impl_linux-64=14.3.0, binutils_impl_linux-64=2.44, ld_impl_linux-64=2.44, gcc_linux-64=14.3.0 (depends on sysroot_linux-64)
- Sysroot: sysroot_linux-64=2.28 (via toolchain deps)
- Flags (from link logs): -D_FORTIFY_SOURCE=2 -O2 ... (inherited by SCons/conda compilers)

**How to Reproduce**

```bash
# 1) Fresh env with conda-forge toolchain & python 3.12.12
micromamba create -n repro -c conda-forge python=3.12.12 libpython-static=3.12.12 gcc_linux-64=14.3 binutils=2.44 -y
micromamba activate repro

# 2) Minimal embed to force link against the static libpython
cat > test.c <<'EOF'
#include
int main(void) {
Py_Initialize();
Py_Finalize();
return 0;
}
EOF

# 3) Try to link statically against libpython3.12.a (note: adjust paths if needed)
x86_64-conda-linux-gnu-cc -O2 -D_FORTIFY_SOURCE=2 -I"$CONDA_PREFIX/include/python3.12" \
test.c "$CONDA_PREFIX/lib/libpython3.12.a" -lpthread -ldl -lm -lutil -o test

# Expected: links fine
# Actual: undefined reference to `__warn_memset_zero_len` from .../pystrtod.o → link fails
```

### Installed packages

```shell
Name Version Build Channel
───────────────────────────────────────────────────────────────────────
_libgcc_mutex 0.1 conda_forge conda-forge
_openmp_mutex 4.5 2_gnu conda-forge
binutils 2.44 h4852527_4 conda-forge
binutils_impl_linux-64 2.44 h9d8b0ac_4 conda-forge
binutils_linux-64 2.44 h4852527_4 conda-forge
bzip2 1.0.8 hda65f42_8 conda-forge
ca-certificates 2025.10.5 hbd8a1cb_0 conda-forge
gcc_impl_linux-64 14.3.0 hd9e9e21_7 conda-forge
gcc_linux-64 14.3.0 h298d278_12 conda-forge
icu 75.1 he02047a_0 conda-forge
kernel-headers_linux-64 4.18.0 he073ed8_8 conda-forge
ld_impl_linux-64 2.44 h1aa0949_4 conda-forge
libexpat 2.7.1 hecca717_0 conda-forge
libffi 3.5.2 h9ec8514_0 conda-forge
libgcc 15.2.0 h767d61c_7 conda-forge
libgcc-devel_linux-64 14.3.0 h85bb3a7_107 conda-forge
libgcc-ng 15.2.0 h69a702a_7 conda-forge
libgomp 15.2.0 h767d61c_7 conda-forge
liblzma 5.8.1 hb9d3cd8_2 conda-forge
libnsl 2.0.1 hb9d3cd8_1 conda-forge
libpython-static 3.12.12 hecca717_1_cpython conda-forge
libsanitizer 14.3.0 hd08acf3_7 conda-forge
libsqlite 3.51.0 hee844dc_0 conda-forge
libstdcxx 15.2.0 h8f9b012_7 conda-forge
libstdcxx-ng 15.2.0 h4852527_7 conda-forge
libuuid 2.41.2 he9a06e4_0 conda-forge
libxcrypt 4.4.36 hd590300_1 conda-forge
libzlib 1.3.1 hb9d3cd8_2 conda-forge
ncurses 6.5 h2d0b736_3 conda-forge
openssl 3.5.4 h26f9b46_0 conda-forge
pip 25.2 pyh8b19718_0 conda-forge
python 3.12.12 hd63d673_1_cpython conda-forge
readline 8.2 h8c095d6_2 conda-forge
setuptools 80.9.0 pyhff2d567_0 conda-forge
sysroot_linux-64 2.28 h4ee821c_8 conda-forge
tk 8.6.13 noxft_hd72426e_102 conda-forge
tzdata 2025b h78e105d_0 conda-forge
wheel 0.45.1 pyhd8ed1ab_1 conda-forge
zstd 1.5.7 hb8e6e7a_2 conda-forge
```

### Environment info

```shell
libmamba version : 2.3.3
micromamba version : 2.3.3
curl version : libcurl/8.14.1 OpenSSL/3.5.4 zlib/1.3.1 zstd/1.5.7 libssh2/1.11.1 nghttp2/1.67.0
libarchive version : libarchive 3.8.2 zlib/1.3.1 bz2lib/1.0.8 libzstd/1.5.7 libb2/bundled
envs directories : /home/gitlab-runner/micromamba/envs
package cache : /home/gitlab-runner/micromamba/pkgs
/home/gitlab-runner/.mamba/pkgs
environment : repro (active)
env location : /home/gitlab-runner/micromamba/envs/repro
user config files : /home/gitlab-runner/.mambarc
populated config files : /home/gitlab-runner/.condarc
virtual packages : __unix=0=0
__linux=5.4.0=0
__glibc=2.31=0
__archspec=1=x86_64_v4
channels : https://conda.anaconda.org/nodefaults/linux-64
https://conda.anaconda.org/nodefaults/noarch
base environment : /home/gitlab-runner/micromamba
platform : linux-64
```

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.