Gcc 如何删除'GLIBC_2.27';编译时的需求? 我一直在使用DOCKER图像进行C++编译。它基于Ubuntu 18.04。当我尝试在一些Ubuntu 16系统上运行时,我收到以下消息:

Gcc 如何删除'GLIBC_2.27';编译时的需求? 我一直在使用DOCKER图像进行C++编译。它基于Ubuntu 18.04。当我尝试在一些Ubuntu 16系统上运行时,我收到以下消息:,gcc,glibc,dynamic-linking,ldd,Gcc,Glibc,Dynamic Linking,Ldd,/lib/x86_64-linux-gnu/libm.so.6:找不到版本'GLIBC_2.27' 我将在下面发布完整的ldd输出。我喜欢使用更新的编译器。我不希望使用较旧的Linux基本映像进行编译(但如果必要,我会这样做)。我静态链接了大多数库,但我没有静态链接glibc。许多网络资源建议不要这样做。有没有什么方法可以让我的新编译器(gcc 7.3)不需要新的glibc?ldd-v输出: linux-vdso.so.1 (0x00007ffd167cf000) libpthr

/lib/x86_64-linux-gnu/libm.so.6:找不到版本'GLIBC_2.27'

我将在下面发布完整的ldd输出。我喜欢使用更新的编译器。我不希望使用较旧的Linux基本映像进行编译(但如果必要,我会这样做)。我静态链接了大多数库,但我没有静态链接glibc。许多网络资源建议不要这样做。有没有什么方法可以让我的新编译器(gcc 7.3)不需要新的glibc?ldd-v输出:

    linux-vdso.so.1 (0x00007ffd167cf000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007eff77399000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007eff77191000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007eff76df3000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007eff76bdb000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007eff767ea000)
    /lib64/ld-linux-x86-64.so.2 (0x00007eff79f90000)

    Version information:
    lbrycrd-linux (4)/lbrycrdd:
        ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2
        librt.so.1 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/librt.so.1
        libm.so.6 (GLIBC_2.27) => /lib/x86_64-linux-gnu/libm.so.6
        libm.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libm.so.6
        libgcc_s.so.1 (GCC_3.3) => /lib/x86_64-linux-gnu/libgcc_s.so.1
        libgcc_s.so.1 (GCC_3.0) => /lib/x86_64-linux-gnu/libgcc_s.so.1
        libgcc_s.so.1 (GCC_4.2.0) => /lib/x86_64-linux-gnu/libgcc_s.so.1
        libpthread.so.0 (GLIBC_2.3.4) => /lib/x86_64-linux-gnu/libpthread.so.0
        libpthread.so.0 (GLIBC_2.3.3) => /lib/x86_64-linux-gnu/libpthread.so.0
        libpthread.so.0 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libpthread.so.0
        libpthread.so.0 (GLIBC_2.3.2) => /lib/x86_64-linux-gnu/libpthread.so.0
        libc.so.6 (GLIBC_2.15) => /lib/x86_64-linux-gnu/libc.so.6
        libc.so.6 (GLIBC_2.4) => /lib/x86_64-linux-gnu/libc.so.6
        libc.so.6 (GLIBC_2.14) => /lib/x86_64-linux-gnu/libc.so.6
        libc.so.6 (GLIBC_2.8) => /lib/x86_64-linux-gnu/libc.so.6
        libc.so.6 (GLIBC_2.7) => /lib/x86_64-linux-gnu/libc.so.6
        libc.so.6 (GLIBC_2.9) => /lib/x86_64-linux-gnu/libc.so.6
        libc.so.6 (GLIBC_2.10) => /lib/x86_64-linux-gnu/libc.so.6
        libc.so.6 (GLIBC_2.3.2) => /lib/x86_64-linux-gnu/libc.so.6
        libc.so.6 (GLIBC_2.3) => /lib/x86_64-linux-gnu/libc.so.6
        libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
        libc.so.6 (GLIBC_2.3.4) => /lib/x86_64-linux-gnu/libc.so.6
    /lib/x86_64-linux-gnu/libpthread.so.0:
        ld-linux-x86-64.so.2 (GLIBC_2.2.5) => /lib64/ld-linux-x86-64.so.2
        ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2
        libc.so.6 (GLIBC_2.14) => /lib/x86_64-linux-gnu/libc.so.6
        libc.so.6 (GLIBC_2.3.2) => /lib/x86_64-linux-gnu/libc.so.6
        libc.so.6 (GLIBC_2.4) => /lib/x86_64-linux-gnu/libc.so.6
        libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
        libc.so.6 (GLIBC_PRIVATE) => /lib/x86_64-linux-gnu/libc.so.6
    /lib/x86_64-linux-gnu/librt.so.1:
        libpthread.so.0 (GLIBC_2.3.2) => /lib/x86_64-linux-gnu/libpthread.so.0
        libpthread.so.0 (GLIBC_PRIVATE) => /lib/x86_64-linux-gnu/libpthread.so.0
        libpthread.so.0 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libpthread.so.0
        libc.so.6 (GLIBC_2.14) => /lib/x86_64-linux-gnu/libc.so.6
        libc.so.6 (GLIBC_2.3.2) => /lib/x86_64-linux-gnu/libc.so.6
        libc.so.6 (GLIBC_2.4) => /lib/x86_64-linux-gnu/libc.so.6
        libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
        libc.so.6 (GLIBC_PRIVATE) => /lib/x86_64-linux-gnu/libc.so.6
    /lib/x86_64-linux-gnu/libm.so.6:
        ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2
        libc.so.6 (GLIBC_2.4) => /lib/x86_64-linux-gnu/libc.so.6
        libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
        libc.so.6 (GLIBC_PRIVATE) => /lib/x86_64-linux-gnu/libc.so.6
    /lib/x86_64-linux-gnu/libgcc_s.so.1:
        libc.so.6 (GLIBC_2.14) => /lib/x86_64-linux-gnu/libc.so.6
        libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
    /lib/x86_64-linux-gnu/libc.so.6:
        ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2
        ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2

您需要根据较旧的glibc版本进行构建。很少有发行版(如果有的话)支持开箱即用。目前唯一可行的方法是建立在较旧的发行版基础上


一些具有长支持周期的发行版提供了不需要更新系统编译器的更新的GCC版本(例如,可用于和的开发人员工具集)。

我面临同样的问题

/lib/i386-linux-gnu/libm.so.6: version `GLIBC_2.27' not found (required by your_lib.so) 
在网上搜索之后,我找到了一些有用的链接

静态链接: 链接-静态。看

使用docker:请参阅

专有解决方案:请参阅

我决定遵循第一条。所以我为你的库创建了一个静态库,并将它与我的二进制文件静态链接。

试试看,例如:


相关的问题:

是的,但是我如何告诉编译器GLUBC版本要用什么来构建?目前,唯一实用的方法是使用一个旧的分布(至少和最终的目标一样旧)。这看起来确实有些牵扯,可能不值得努力。我确实觉得这很有启发性:glibc_versoin_头球太棒了!
__asm__(".symver old_foo,foo@VERS_1.1");