Skip to content

Missing libm linkage causes undefined symbol errors #5137

@BwL1289

Description

@BwL1289

When building Biopython 1.86 from source on Linux (aarch64), some C extension modules fail to load at runtime due to missing linkage against libm.

The affected extensions use math functions provided by libm, but do not explicitly link against it. As a result, importing the modules fails with undefined symbol errors.

[./lib/python3.12/site-packages/Bio/Cluster/_cluster.cpython-312-aarch64-linux-gnu.so]:
    linux-vdso.so.1 (0x0000ffff907d7000)
    libc.so.6 => /lib64/libc.so.6 (0x0000ffff90570000)
    /lib/ld-linux-aarch64.so.1 (0x0000ffff9078a000)
undefined symbol: exp	(./lib/python3.12/site-packages/Bio/Cluster/_cluster.cpython-312-aarch64-linux-gnu.so)
undefined symbol: log	(./lib/python3.12/site-packages/Bio/Cluster/_cluster.cpython-312-aarch64-linux-gnu.so)
undefined symbol: sqrt	(./lib/python3.12/site-packages/Bio/Cluster/_cluster.cpython-312-aarch64-linux-gnu.so)

[./lib/python3.12/site-packages/Bio/PDB/ccealign.cpython-312-aarch64-linux-gnu.so]:
    linux-vdso.so.1 (0x0000ffff9e545000)
    libc.so.6 => /lib64/libc.so.6 (0x0000ffff9e2f6000)
    /lib/ld-linux-aarch64.so.1 (0x0000ffff9e4f8000)
undefined symbol: log10	(./lib/python3.12/site-packages/Bio/PDB/ccealign.cpython-312-aarch64-linux-gnu.so)

Workaround is to manually patch setup.py to explicitly link against libm:

sed -i '/Extension($/,/extra_compile_args=\["-DCLUSTER_USE_PYTHON_MEMORY"\],$/{ s/extra_compile_args=\["-DCLUSTER_USE_PYTHON_MEMORY"\],$/extra_compile_args=["-DCLUSTER_USE_PYTHON_MEMORY"], libraries=["m"],/ }' "./setup.py"

sed -i '/Extension("Bio\.PDB\.ccealign"/s/),$/, libraries=["m"]),/' "./setup.py"

Environment

  • Biopython version: 1.86
  • OS: Amazon Linux 2023 (aarch64)
  • Python: 3.12.x
  • Compiler: Clang 20 (git)

Metadata

Metadata

Assignees

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