Skip to content

cannot repair "...-linux_x86_64.whl" to "manylinux1_x86_64" ABI because of the presence of too-recent versioned symbols. You'll need to compile the wheel on an older toolchain. #291

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
smpurkis opened this issue Mar 4, 2021 · 7 comments
Labels

Comments

@smpurkis
Copy link

smpurkis commented Mar 4, 2021

I'm trying to make a pypi package of https://github.com/smpurkis/fast_json_normalize/tree/cython_implementation, has a simple cython script in https://github.com/smpurkis/fast_json_normalize/blob/cython_implementation/fast_json_normalize/cythonized.pyx.

As I'm on Ubuntu 20.04, I'm running auditwheel --verbose repair dist/fast_json_normalize-0.0.4-cp38-cp38-linux_x86_64.whl to fix the wheels made by python -m build.

But I get this error message:

INFO:auditwheel.main_repair:Repairing fast_json_normalize-0.0.4-cp38-cp38-linux_x86_64.whl
DEBUG:auditwheel.wheel_abi:processing: fast_json_normalize/cythonized.cpython-38-x86_64-linux-gnu.so
DEBUG:auditwheel.lddtree:parse_ld_so_conf(//etc/ld.so.conf)
DEBUG:auditwheel.lddtree:  glob: /etc/ld.so.conf.d/*.conf
DEBUG:auditwheel.lddtree:  parse_ld_so_conf(/etc/ld.so.conf.d/cuda-11-0.conf)
DEBUG:auditwheel.lddtree:  parse_ld_so_conf(/etc/ld.so.conf.d/libc.conf)
DEBUG:auditwheel.lddtree:  parse_ld_so_conf(/etc/ld.so.conf.d/x86_64-linux-gnu.conf)
DEBUG:auditwheel.lddtree:  parse_ld_so_conf(/etc/ld.so.conf.d/i386-linux-gnu.conf)
DEBUG:auditwheel.lddtree:  parse_ld_so_conf(/etc/ld.so.conf.d/zz_i386-biarch-compat.conf)
DEBUG:auditwheel.lddtree:  parse_ld_so_conf(/etc/ld.so.conf.d/fakeroot-x86_64-linux-gnu.conf)
DEBUG:auditwheel.lddtree:linker ldpaths: {'conf': ['/usr/local/cuda-11.0/targets/x86_64-linux/lib', '/usr/local/lib', '/lib/x86_64-linux-gnu', '/usr/lib/x86_64-linux-gnu', '/lib/i386-linux-gnu', '/usr/lib/i386-linux-gnu', '/usr/lib32', '/usr/lib/x86_64-linux-gnu/libfakeroot', '/lib', '/lib64/', '/usr/lib', '/usr/lib64'], 'env': [], 'interp': []}
DEBUG:auditwheel.lddtree:lddtree(fast_json_normalize/cythonized.cpython-38-x86_64-linux-gnu.so)
DEBUG:auditwheel.lddtree:  ldpaths[rpath]   = []
DEBUG:auditwheel.lddtree:  ldpaths[runpath] = []
DEBUG:auditwheel.lddtree:lddtree(/lib/x86_64-linux-gnu/libc-2.31.so)
DEBUG:auditwheel.lddtree:lddtree(/lib/x86_64-linux-gnu/ld-2.31.so)
DEBUG:auditwheel.wheel_abi:key libc.so.6, value GLIBC_2.14
DEBUG:auditwheel.wheel_abi:key libc.so.6, value GLIBC_2.2.5
DEBUG:auditwheel.wheel_abi:key libc.so.6, value GLIBC_2.4
DEBUG:auditwheel.wheel_abi:{
    "fast_json_normalize/cythonized.cpython-38-x86_64-linux-gnu.so": {
        "interp": null,
        "path": "fast_json_normalize/cythonized.cpython-38-x86_64-linux-gnu.so",
        "realpath": "fast_json_normalize/cythonized.cpython-38-x86_64-linux-gnu.so",
        "needed": [
            "libc.so.6"
        ],
        "rpath": [],
        "runpath": [],
        "libs": {
            "libc.so.6": {
                "realpath": "/lib/x86_64-linux-gnu/libc-2.31.so",
                "path": "/lib/x86_64-linux-gnu/libc.so.6",
                "needed": [
                    "ld-linux-x86-64.so.2"
                ]
            },
            "ld-linux-x86-64.so.2": {
                "realpath": "/lib/x86_64-linux-gnu/ld-2.31.so",
                "path": "/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2",
                "needed": []
            }
        }
    }
}
DEBUG:auditwheel.wheel_abi:external reference info
DEBUG:auditwheel.wheel_abi:{
    "linux_x86_64": {
        "libs": {
            "libc.so.6": "/lib/x86_64-linux-gnu/libc-2.31.so"
        },
        "priority": 0
    },
    "manylinux1_x86_64": {
        "libs": {},
        "priority": 100
    },
    "manylinux2010_x86_64": {
        "libs": {},
        "priority": 90
    },
    "manylinux2014_x86_64": {
        "libs": {},
        "priority": 80
    },
    "manylinux_2_24_x86_64": {
        "libs": {},
        "priority": 70
    }
}
DEBUG:auditwheel.policy.versioned_symbols:Package requires GLIBC_2.14, incompatible with policy manylinux1_x86_64 which requires {'GLIBC_2.2.5', 'GLIBC_2.5', 'GLIBC_2.4', 'GLIBC_2.3.3', 'GLIBC_2.3.2', 'GLIBC_2.3', 'GLIBC_2.2.6', 'GLIBC_2.3.4'}
DEBUG:auditwheel.policy.versioned_symbols:Package requires GLIBC_2.14, incompatible with policy manylinux2010_x86_64 which requires {'GLIBC_2.2.5', 'GLIBC_2.5', 'GLIBC_2.7', 'GLIBC_2.9', 'GLIBC_2.6', 'GLIBC_2.4', 'GLIBC_2.11', 'GLIBC_2.8', 'GLIBC_2.12', 'GLIBC_2.10', 'GLIBC_2.3.3', 'GLIBC_2.3.2', 'GLIBC_2.3', 'GLIBC_2.2.6', 'GLIBC_2.3.4'}
DEBUG:auditwheel.policy.versioned_symbols:Package requires GLIBC_2.14, incompatible with policy manylinux1_x86_64 which requires {'GLIBC_2.2.5', 'GLIBC_2.5', 'GLIBC_2.4', 'GLIBC_2.3.3', 'GLIBC_2.3.2', 'GLIBC_2.3', 'GLIBC_2.2.6', 'GLIBC_2.3.4'}
DEBUG:auditwheel.policy.versioned_symbols:Package requires GLIBC_2.14, incompatible with policy manylinux2010_x86_64 which requires {'GLIBC_2.2.5', 'GLIBC_2.5', 'GLIBC_2.7', 'GLIBC_2.9', 'GLIBC_2.6', 'GLIBC_2.4', 'GLIBC_2.11', 'GLIBC_2.8', 'GLIBC_2.12', 'GLIBC_2.10', 'GLIBC_2.3.3', 'GLIBC_2.3.2', 'GLIBC_2.3', 'GLIBC_2.2.6', 'GLIBC_2.3.4'}
DEBUG:auditwheel.policy.versioned_symbols:Package requires GLIBC_2.14, incompatible with policy manylinux1_x86_64 which requires {'GLIBC_2.2.5', 'GLIBC_2.5', 'GLIBC_2.4', 'GLIBC_2.3.3', 'GLIBC_2.3.2', 'GLIBC_2.3', 'GLIBC_2.2.6', 'GLIBC_2.3.4'}
DEBUG:auditwheel.policy.versioned_symbols:Package requires GLIBC_2.14, incompatible with policy manylinux2010_x86_64 which requires {'GLIBC_2.2.5', 'GLIBC_2.5', 'GLIBC_2.7', 'GLIBC_2.9', 'GLIBC_2.6', 'GLIBC_2.4', 'GLIBC_2.11', 'GLIBC_2.8', 'GLIBC_2.12', 'GLIBC_2.10', 'GLIBC_2.3.3', 'GLIBC_2.3.2', 'GLIBC_2.3', 'GLIBC_2.2.6', 'GLIBC_2.3.4'}
DEBUG:auditwheel.policy.versioned_symbols:Package requires GLIBC_2.14, incompatible with policy manylinux1_x86_64 which requires {'GLIBC_2.2.5', 'GLIBC_2.5', 'GLIBC_2.4', 'GLIBC_2.3.3', 'GLIBC_2.3.2', 'GLIBC_2.3', 'GLIBC_2.2.6', 'GLIBC_2.3.4'}
DEBUG:auditwheel.policy.versioned_symbols:Package requires GLIBC_2.14, incompatible with policy manylinux2010_x86_64 which requires {'GLIBC_2.2.5', 'GLIBC_2.5', 'GLIBC_2.7', 'GLIBC_2.9', 'GLIBC_2.6', 'GLIBC_2.4', 'GLIBC_2.11', 'GLIBC_2.8', 'GLIBC_2.12', 'GLIBC_2.10', 'GLIBC_2.3.3', 'GLIBC_2.3.2', 'GLIBC_2.3', 'GLIBC_2.2.6', 'GLIBC_2.3.4'}
DEBUG:auditwheel.policy.versioned_symbols:Package requires GLIBC_2.14, incompatible with policy manylinux1_x86_64 which requires {'GLIBC_2.2.5', 'GLIBC_2.5', 'GLIBC_2.4', 'GLIBC_2.3.3', 'GLIBC_2.3.2', 'GLIBC_2.3', 'GLIBC_2.2.6', 'GLIBC_2.3.4'}
DEBUG:auditwheel.policy.versioned_symbols:Package requires GLIBC_2.14, incompatible with policy manylinux2010_x86_64 which requires {'GLIBC_2.2.5', 'GLIBC_2.5', 'GLIBC_2.7', 'GLIBC_2.9', 'GLIBC_2.6', 'GLIBC_2.4', 'GLIBC_2.11', 'GLIBC_2.8', 'GLIBC_2.12', 'GLIBC_2.10', 'GLIBC_2.3.3', 'GLIBC_2.3.2', 'GLIBC_2.3', 'GLIBC_2.2.6', 'GLIBC_2.3.4'}
usage: auditwheel [-h] [-V] [-v] command ...
auditwheel: error: cannot repair "dist/fast_json_normalize-0.0.4-cp38-cp38-linux_x86_64.whl" to "manylinux1_x86_64" ABI because of the presence of too-recent versioned symbols. You'll need to compile the wheel on an older toolchain.
(py8) ⋊> ~/P/fast_json_normalize on cython_implementation ◦                                                                                                                                                  20:41:38

I found these other similar issues made, but didn't find a fix.
#36
#146
#229

@mayeut
Copy link
Member

mayeut commented Mar 6, 2021

@smpurkis,

As you're building on a distro that's more recent than the requested platform (which is manylinux1_x86_64 by default), the libraries embedded in your wheel relies on symbols that are not present on some manylinux1 compatible systems and that's why auditwheel errors out (the message can be somehow cryptic).
manylinux wheels are most often built and repaired inside a manylinux container to avoid this kind of situation. That's one way to go.
Given the symbols that appear to be missing, another option would be to use --plat manylinux2014_x86_64 to produce a manylinux2014 wheel.

Requiring a more recent manylinux policy has a potential impact on your end-users:

  • they need to use a distro version compatible with the policy (c.f. pep600_compliance for an overview of some of them)
  • they need a recent pip(c.f. README in manylinux repo)

@smpurkis
Copy link
Author

smpurkis commented Mar 6, 2021

@mayeut,

Okay, thanks for the informative response, I will try and use the manylinux container to build the wheels as you suggested.
As a backup (from my understanding of what you've said) if I build on a Ubuntu 16.04 virtual machine, that would get round this issue as well, correct?

@mayeut
Copy link
Member

mayeut commented Mar 6, 2021

As a backup (from my understanding of what you've said) if I build on a Ubuntu 16.04 virtual machine, that would get round this issue as well, correct?

No, ubuntu 16.04 is still too recent to ensure manylinux1, manylinux2010 or manylinux2014 compatibility. You can get manylinux_2_24 compatibility for sure. You still have to pass --plat argument to auditwheel to tell it that's ok to generate this level though. --plat manylinux_2_24_x86_64 in this case.

ubuntu 16.04 would be manylinux_2_23_x86_64 if that policy were supported. Meaning, only runs on systems with glibc 2.23+.
manylinux1_x86_64 is an alias for manylinux_2_5_x86_64.
manylinux2010_x86_64 is an alias for manylinux_2_12_x86_64.
manylinux2014_x86_64 is an alias for manylinux_2_17_x86_64.

@smpurkis
Copy link
Author

smpurkis commented Mar 6, 2021

Aw okay, might spin up a Window 10 VM as a backup then.
Thanks for all the information 🙂

@vot4anto
Copy link

I have some trouble on ubuntu 20.04 and also --plat manylinux2014 option don't work for me.
auditwheel: error: cannot repair "GDAL-3.3.3-cp39-cp39-linux_x86_64.whl" to "manylinux2014_x86_64" ABI because of the presence of too-recent versioned symbols. You'll need to compile the wheel on an older toolchain.

@georgeswani
Copy link

Hi, Thank you for the suggestion , I have this issue for arm64 architecture , I couldn’t build it in manylinux container as my python package is not compatible with Debian , hence I have to rely on ubuntu20.04 for the successful build , but getting this error when running auditwheel repair ? Any suggestions pls ?

@mayeut
Copy link
Member

mayeut commented Dec 18, 2021

@vot4anto, @georgeswani,

The most recent policy implemented in auditwheel is manylinux_2_27 (manylinux_2_27_x86_64, manylinux_2_27_aarch64, ...). You can try with this one.
If that does not work for you, please open a new issue requesting support for more recent policies along with the full trace of symbols reported by auditwheel.

Reminder:
Requiring a more recent manylinux policy has a potential impact on your end-users:

  • they need to use a distro version compatible with the policy (c.f. pep600_compliance for an overview of some of them)
  • they need a recent pip(c.f. README in manylinux repo)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

4 participants