Skip to content

libpython depends on libstdcxx >=15 but links no C++ runtime #951

Open

Description

@MilesCranmerBot

Since the split in #894, every libpython build depends on libstdcxx >=15 on Linux (and libcxx on macOS), but the library links no C++ runtime:

$ objdump -p lib/libpython3.15.so.1.0 | grep NEEDED   # libpython-3.15.0-hdc7f604_100_cp315, linux-64
  NEEDED libm.so.6 libpthread.so.0 libdl.so.2 libutil.so.1 libgcc_s.so.1 libc.so.6 ld-linux-x86-64.so.2
$ otool -L lib/libpython3.15.dylib                    # osx-arm64
  @rpath/libpython3.15.dylib, /usr/lib/libSystem.B.dylib

The requirement is a run-export of {{ compiler('cxx') }} in the libpython output's build requirements. The python output already drops the same run-export with ignore_run_exports_from.

This blocks environments that cap libstdc++. PythonCall.jl (Julia embedding Python, via CondaPkg) caps libstdcxx at the version Julia bundles, which is below 15 on Julia 1.10 and 1.12. Under libstdcxx <15:

  • python + libpython: unsolvable
  • python=3.14.8 or python=3.13.16: unsolvable, since they pin libpython exactly
  • plain python: resolves to an older build from before the split (3.14.6)

From 3.15 on, python no longer depends on libpython, so embedders like PythonCall have to request libpython explicitly, which makes this harder to avoid.

Fixes: #949 (main) and #950 (3.14). The 3.11, 3.12 and 3.13 branches have the same line.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions