Skip to content

[python-package] Vendor libgomp.so in Linux wheels for manylinux compliance? #7141

@rdbisme

Description

@rdbisme

Description

Hello. LightGBM depends on libgomp, but it doesn't embed it. Which means it's not really manylinux compliant considering that most docker images don't ship libgomp by default.

I understand that embedding OpenMP might be problematic because other softwares might depend on it and bundle it bringing duplication.

Maybe a dedicated wheel could be crafted to ship various libgomp such that other python projects might depend on it to avoid duplication but to still be fully manylinux compliant?

If this is to allow linking with optimized OpenMP libraries for HPC, I'd argue that in that case the wheel should be recompiled anyway from source to enable specific local optimizations anyway (maybe using something like spack).

Reproducible example

auditwheel -v show lightgbm-4.6.0-py3-none-manylinux_2_28_x86_64.whl
lightgbm-4.6.0-py3-none-manylinux_2_28_x86_64.whl is consistent with
the following platform tag: "linux_x86_64".

The wheel references external versioned symbols in these
system-provided shared libraries: libdl.so.2 with versions
{'GLIBC_2.2.5'}, libgomp.so.1 with versions {'OMP_1.0', 'GOMP_4.5',
'GOMP_4.0', 'GOMP_1.0'}, libgcc_s.so.1 with versions {'GCC_3.0'},
libpthread.so.0 with versions {'GLIBC_2.2.5'}, libm.so.6 with versions
{'GLIBC_2.2.5', 'GLIBC_2.27'}, libstdc++.so.6 with versions
{'GLIBCXX_3.4.11', 'GLIBCXX_3.4.5', 'CXXABI_1.3.9', 'GLIBCXX_3.4.14',
'GLIBCXX_3.4.9', 'GLIBCXX_3.4.18', 'CXXABI_1.3.5', 'GLIBCXX_3.4.22',
'GLIBCXX_3.4.15', 'CXXABI_1.3.7', 'CXXABI_1.3.8', 'CXXABI_1.3',
'CXXABI_1.3.3', 'GLIBCXX_3.4.19', 'GLIBCXX_3.4.21', 'GLIBCXX_3.4.20',
'GLIBCXX_3.4'}, libc.so.6 with versions {'GLIBC_2.14', 'GLIBC_2.3',
'GLIBC_2.38', 'GLIBC_2.32', 'GLIBC_2.17', 'GLIBC_2.2.5', 'GLIBC_2.4',
'GLIBC_ABI_DT_RELR', 'GLIBC_2.6', 'GLIBC_2.3.4', 'GLIBC_2.34'}

This constrains the platform tag to "manylinux_2_38_x86_64". In order
to achieve a more compatible tag, you would need to recompile a new
wheel from source on a system with earlier versions of these
libraries, such as a recent manylinux image.

The following external shared libraries are required by the wheel:
{
    "libgomp.so.1": "/lib/libgomp.so.1.0.0"
}

In order to achieve the tag platform tag 'manylinux_2_41_x86_64' the
following shared library dependencies will need to be eliminated:

libgomp.so.1

In order to achieve the tag platform tag 'manylinux_2_40_x86_64' the
following shared library dependencies will need to be eliminated:

libgomp.so.1

In order to achieve the tag platform tag 'manylinux_2_39_x86_64' the
following shared library dependencies will need to be eliminated:

libgomp.so.1

Environment info

Command(s) you used to install LightGBM

Additional Comments

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions