python / python/mypy

mypyc-compiled extensions missing math library linking causing undefined symbol errors

Aperta
#20,567 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

bug
Lingua principale
Python
Stelle
20.6k
Fork
3.3k
Metriche di merge delle PR
Metriche PR in attesa

Descrizione

Bug Report
When building mypy with mypyc enabled (MYPY_USE_MYPYC=1), the compiled C extensions are missing explicit linking to the math library (libm), causing undefined symbol errors for standard math functions.

[./lib/python3.12/site-packages/30fcd23745efe32ce681__mypyc.cpython-312-aarch64-linux-gnu.so]:
    linux-vdso.so.1 (0x0000ffffb4c9c000)
    libc.so.6 => /lib64/libc.so.6 (0x0000ffffb4632000)
    /lib/ld-linux-aarch64.so.1 (0x0000ffffb4c4f000)
undefined symbol: sin	(./lib/python3.12/site-packages/30fcd23745efe32ce681__mypyc.cpython-312-aarch64-linux-gnu.so)
undefined symbol: cos	(./lib/python3.12/site-packages/30fcd23745efe32ce681__mypyc.cpython-312-aarch64-linux-gnu.so)
undefined symbol: tan	(./lib/python3.12/site-packages/30fcd23745efe32ce681__mypyc.cpython-312-aarch64-linux-gnu.so)
undefined symbol: sqrt	(./lib/python3.12/site-packages/30fcd23745efe32ce681__mypyc.cpython-312-aarch64-linux-gnu.so)
undefined symbol: exp	(./lib/python3.12/site-packages/30fcd23745efe32ce681__mypyc.cpython-312-aarch64-linux-gnu.so)
undefined symbol: fmod	(./lib/python3.12/site-packages/30fcd23745efe32ce681__mypyc.cpython-312-aarch64-linux-gnu.so)
undefined symbol: pow	(./lib/python3.12/site-packages/30fcd23745efe32ce681__mypyc.cpython-312-aarch64-linux-gnu.so)
undefined symbol: log	(./lib/python3.12/site-packages/30fcd23745efe32ce681__mypyc.cpython-312-aarch64-linux-gnu.so)

[./lib/python3.12/site-packages/3204bda914b7f2c6f497__mypyc.cpython-312-aarch64-linux-gnu.so]:
    linux-vdso.so.1 (0x0000ffff80b96000)
    libc.so.6 => /lib64/libc.so.6 (0x0000ffff7ee32000)
    /lib/ld-linux-aarch64.so.1 (0x0000ffff80b49000)
undefined symbol: sin	(./lib/python3.12/site-packages/3204bda914b7f2c6f497__mypyc.cpython-312-aarch64-linux-gnu.so)
undefined symbol: cos	(./lib/python3.12/site-packages/3204bda914b7f2c6f497__mypyc.cpython-312-aarch64-linux-gnu.so)
undefined symbol: tan	(./lib/python3.12/site-packages/3204bda914b7f2c6f497__mypyc.cpython-312-aarch64-linux-gnu.so)
undefined symbol: sqrt	(./lib/python3.12/site-packages/3204bda914b7f2c6f497__mypyc.cpython-312-aarch64-linux-gnu.so)
undefined symbol: exp	(./lib/python3.12/site-packages/3204bda914b7f2c6f497__mypyc.cpython-312-aarch64-linux-gnu.so)
undefined symbol: fmod	(./lib/python3.12/site-packages/3204bda914b7f2c6f497__mypyc.cpython-312-aarch64-linux-gnu.so)
undefined symbol: pow	(./lib/python3.12/site-packages/3204bda914b7f2c6f497__mypyc.cpython-312-aarch64-linux-gnu.so)
undefined symbol: log	(./lib/python3.12/site-packages/3204bda914b7f2c6f497__mypyc.cpython-312-aarch64-linux-gnu.so)

To Reproduce

PACKAGE_VERSION="v1.19.1"
ARCHIVE_NAME="${PACKAGE_VERSION}.tar.gz"
curl -fLO "https://github.com/python/mypy/archive/refs/tags/${ARCHIVE_NAME}"
tar xf "${ARCHIVE_NAME}"
cd "mypy-${PACKAGE_VERSION#v}"

export MYPY_USE_MYPYC="1"
pip3 install . -v -v -v --compile --no-deps --no-cache-dir --no-build-isolation --no-binary :all:

Expected Behavior
No unexpected undefined symbols

Actual Behavior

Unexpected undefined symbols

Your Environment

  • OS: Amz Linux 2023 aarch64
  • Python: 3.12.7
  • mypy: 1.19.1

Proposed Solution

The math library needs to be added to the extension modules during the build process. A potential patch location is in setup.py after the extensions are created:

# After mypyc_build_ext() creates ext_modules, add math library
for ext in ext_modules:
    if "m" not in ext.libraries:
        ext.libraries.append("m")

However, this approach may over-link modules that don't need libm. A more precise solution would require:

  1. Identifying which specific mypyc-generated extensions actually use math functions
  2. Only adding -lm to those specific extensions
  3. This may require changes in mypyc itself to track which C math functions are used during compilation

Temporary Workaround is:

# Patch setup.py to add math library to all extensions
sed -i '
/log_trace=log_trace,$/,/^    assert ext_modules$/ {
    /^    )$/ a\
\
    for ext in ext_modules:\
        if "m" not in ext.libraries:\
            ext.libraries.append("m")
}
' "./setup.py"

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia in setup.py, nelle vicinanze di mypyc_build_ext() e della creazione di ext_modules, quindi riproduci la compilazione con MYPY_USE_MYPYC=1 usando il comando pip documentato nell’ambiente interessato. Determina quali estensioni generate richiedono libm e assicurati che le estensioni compilate vengano caricate senza simboli matematici non definiti, evitando quando possibile il linking non necessario.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
python
Ambito
build-system
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
38/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.