I've got this error with buildroot-2022.11 when executing make.

Ubuntu 20.04 - added this repo as described in the link

sudo apt update
sudo apt install libc6

It automatically installed 2.35 for me.

Answer from mister_kanister on Stack Overflow
🌐
GitHub
github.com › directus › directus › issues › 6071
/lib64/libc.so.6: version 'GLIBC_2.25' not found · Issue #6071 · directus/directus
June 4, 2021 - Just updated from rc71 to rc73 When running npx directus bootstrap : /lib64/libc.so.6: version 'GLIBC_2.25' not found (required by [...] /node_modules/argon2/lib/binding/napi-v3/argon2.node) Centos 7.9 New requirement with new version of...
Author   directus
Discussions

XO from source Centos7 GLIBC_2.25 missing error | XCP-ng and XO forum
Hi! Today I tried update my xen orchestra on CentOS7 and got this error: Jul 07 12:09:54 xoa xo-server[42982]: Error: /lib64/libc.so.6: version `GLIBC_2.25' ... More on xcp-ng.org
🌐 xcp-ng.org
July 8, 2022
Version GLIBC not found and target not found?
Retry after running sudo pacman -Syu. More on reddit.com
🌐 r/linuxquestions
12
12
October 15, 2022
node.js - /lib64/libc.so.6: version `GLIBC_2.14' not found. Why am I getting this error? - Stack Overflow
I am working in node js. I have installed hummus package. It installed properly. I am using this package for modifying the pdf files. While downloading the pdf I am calling hummus. Onclick of downl... More on stackoverflow.com
🌐 stackoverflow.com
/lib64/libc.so.6: version `GLIBC_2.26' not found
hi all, trying to run aspera connect plugin on a centos 7 machine but im getting this error when im trying to install /lib64/libc.so.6: version `GLIBC_2.26’ not found ive tried to install yum install glibc but no joy thanks, rob More on community.spiceworks.com
🌐 community.spiceworks.com
3
5
April 24, 2023
🌐
Stack Overflow
stackoverflow.com › questions › 78086278 › libc-so-6-version-glibc-2-25-not-found
c++ - libc.so.6: version `GLIBC_2.25' not found - Stack Overflow
krk@test-lnx44-11:~/debugs/working$ /lib/x86_64-linux-gnu/libc.so.6 GNU C Library (Ubuntu GLIBC 2.23-0ubuntu11.3) stable release version 2.23 · GLIBC versions i could find in cc1 exe from gcc 12.2 version is :- gcc/aarch64-unknown-nto-qnx8.0.0/12.2.0/cc1 | grep GLIBC GLIBC_2.3 GLIBC_2.2.5 GLIBC_2.7 GLIBC_2.14 GLIBC_2.25 __GLIBCXX_BITSIZE_INT_N_%d=%d __GLIBCXX_TYPE_INT_N_%d=__int%d
🌐
Bits and Dragons
bitsanddragons.wordpress.com › 2020 › 08 › 26 › glibc_2-25-compile-on-centos-7-8
GLIBC_2.25 compile on CentOS 7.8 | Bits and Dragons
September 9, 2020 - I think you are compiling it on a zsh, I was doing it on a bash shell. It should be the same, anyway, maybe it’s a path issue. Did you use –prefix=/opt/local/glibc-2.25/? LikeLike · Reply ↓ · After I strings /lib64/libc.so.6 | grep ^GLIBC still no 2.25 version ·
🌐
XCP-ng
xcp-ng.org › forum › topic › 6077 › xo-from-source-centos7-glibc_2-25-missing-error
XO from source Centos7 GLIBC_2.25 missing error | XCP-ng and XO forum
July 8, 2022 - Jul 07 12:09:52 xoa xo-server[42982]: yarn run v1.22.19 Jul 07 12:09:52 xoa xo-server[42982]: $ node dist/cli.mjs Jul 07 12:09:54 xoa xo-server[42982]: node:internal/modules/cjs/loader:1189 Jul 07 12:09:54 xoa xo-server[42982]: return process.dlopen(module, path.toNamespacedPath(filename)); Jul 07 12:09:54 xoa xo-server[42982]: ^ **Jul 07 12:09:54 xoa xo-server[42982]: Error: /lib64/libc.so.6: version `GLIBC_2.25' not found (required by /opt/xen-orchestra/node_modules/argon2/lib/binding/napi-v3/argon2.node)** Jul 07 12:09:54 xoa xo-server[42982]: at Object.Module._extensions..node (node:intern
🌐
Velociraptor
docs.velociraptor.app › what do i do about "version glibc_2.xx not found" errors?
What do I do about "version GLIBC_2.xx not found" errors?
Version needs section '.gnu.version_r' contains 3 entries: Addr: 0x00000000004106a0 Offset: 0x0106a0 Link: 7 (.dynstr) 000000: Version: 1 File: libdl.so.2 Cnt: 1 0x0010: Name: GLIBC_2.2.5 Flags: none Version: 10 0x0020: Version: 1 File: libpthread.so.0 Cnt: 2 0x0030: Name: GLIBC_2.3.2 Flags: none Version: 6 0x0040: Name: GLIBC_2.2.5 Flags: none Version: 5 0x0050: Version: 1 File: libc.so.6 Cnt: 8 0x0060: Name: GLIBC_2.11 Flags: none Version: 12 0x0070: Name: GLIBC_2.7 Flags: none Version: 11 0x0080: Name: GLIBC_2.14 Flags: none Version: 9 0x0090: Name: GLIBC_2.15 Flags: none Version: 8 0x00a0: Name: GLIBC_2.4 Flags: none Version: 7 0x00b0: Name: GLIBC_2.3.4 Flags: none Version: 4 0x00c0: Name: GLIBC_2.2.5 Flags: none Version: 3 0x00d0: Name: GLIBC_2.3 Flags: none Version: 2
🌐
Reddit
reddit.com › r/linuxquestions › version glibc not found and target not found?
r/linuxquestions on Reddit: Version GLIBC not found and target not found?
October 15, 2022 -

Hey, guys. I usually go with Ubuntu but right now I'm using an Arch VM (Cyberops Workstation) for a course I'm enrolled in. I'm having two separate issues. The first is that I'm trying to locate messsages and I get /usr/lib/libc.so.6: version \GLIBC_2.33' not found (required by locate). When I looked through that library, the file in question did not exist. I had already updated my entire system with -Syu, that changed nothing. I read sudo pacman -S libtool gcc gcc-libs would fix my problem and while now libc.so.6 exists, the same message pops up. What can I do?

I know I shouldn't partially update, but it's fine. I have exported an OVA of my system before tinkering with it and I can start over any time.

The second is that I'm also trying to install chkrootkit and I keep getting error: target not found: chkrootkit, even though as I've said I have already ran sudo pacman -Syu and so to my understanding any mirrors and repositories should have been updated. I figured I might need some kind of AUR helper, even though the guy in the Cisco instructional video is able to install it through pacman, but I keep having problems installing any of them.

Find elsewhere
🌐
Red Hat
access.redhat.com › solutions › 1285263
Why does the application give an error "/lib64/libc.so.6: version `GLIBC_2.X' not found"? - Red Hat Customer Portal
April 1, 2026 - Why does the application give an error /lib64/libc.so.6: versionGLIBC_2.X' not found`? Application exits with glibc error on Red Hat Enterprise Linux 5; Error Log : Starting 'mpscmjboss5 dev Compile ClassPath' om: /lib64/libc.so.6: version `GLIBC_2.7' not found (required by om) The following glibc error is seen while executing custom application on Red Hat Enterprise Linux 6; ./wombat_fatso_dyn ./wombat_fatso_dyn: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./wombat_fatso_dyn) ./wombat_fatso_dyn: /lib64/libc.so.6: version `GLIBC_2.11' not found (required by ./wombat_fatso_dyn)
🌐
Splunk Community
community.splunk.com › t5 › Splunk-Enterprise › version-GLIBC-2-25-not-found-required-by-opt-splunk-bin-temp › m-p › 751908
version `GLIBC_2.25' not found (required by /opt/splunk/bin/temp_splunk-preinstall)
August 20, 2025 - /opt/splunk/bin/temp_splunk‑preinstall: /lib64/libc.so.6: version 'GLIBC_2.25' not found means that the pre‑install script and/or its dependencies are require a minimum of glibc 2.25 . CentOS 7 ships with glibc 2.17.
🌐
Red Hat
access.redhat.com › solutions › 7077895
oc command fails due to missing glibc library - Red Hat Customer Portal
March 9, 2026 - oc commands fail with the following error: $ oc version oc: /lib64/libc.so.6: version `GLIBC_2.33' not found (required by oc) oc: /lib64/libc.so.6: version `GLIBC_2.34' not found (required by oc) oc: /lib64/libc.so.6: version `GLIBC_2.32' not found (required by oc)
Top answer
1 of 1
13

Now this answer is presumably going to come a bit late, but let me try to give you some technical background of what you ran into here and possible ways to fix it.

For starters, what was commented about is true. The glibc is the C runtime which is central to a Ubuntu system. However, other distros choose other runtimes and a program could also opt to statically link a runtime that is more liberally licensed (musl-libc comes to mind). The latter method has its limitations as well, though.

As a rule of thumb you can run the software that was built on your system. This is perfectly fine for a system such as certain BSDs or Gentoo Linux, but it starts to become an issue for pre-packaged distros like Debian and Ubuntu.

System calls

Your kernel provides a number of system calls. A certain subset of these is standardized some will be specific to your system, i.e. GNU/Linux in this case.

Most system calls - such as "open a file" - have a direct counterpart in your C runtime, but the C runtime often will provide additional stuff on top (e.g. facilities for dynamic linking ...).

C runtime

The glibc is a so-called shared object. Other systems call it dynamic library or dynamically linked library. The goal is largely the same, although implementation and functionality differ.

The term shared object refers to the fact that the object code ("library functions") is shared across processes in your system.

Another advantage is that only this one library needs to be updated instead of each and every application that was statically linked with a particular version of the library.

And proprietary software (i.e. that which isn't FLOSS) has the licensing issue because of certain "issues" the glibc license brings for someone unwilling to disclose their proprietary source code. Now this is evidently not the issue with your code, since you could go ahead and build your own.

Missing symbols

The error you encountered:

/lib/x86_64-linux-gnu/libc.so.6: version 'GLIBC_2.25' not found

is one that I often jokingly confront people with who are complaining about "DLL hell" on Windows. Linux isn't better and the conventional linkers give you little control of the symbols you link against.

Alright, let's get our hands dirty a little. Make sure you have binutils installed (apt install binutils) and I'll assume that you have the standard Bash shell installed and that it can be found in /bin/bash.

We're going to start with the following invocation (instead of readelf, objdump would also work, but it has its own command line arguments):

readelf --dyn-syms /bin/bash|grep -P '\WUND\W'

What it does is to list all dynamic symbols from the Bash binary and then limit the output to those items which are undefined (UND). This will give us the list of functions Bash uses from glibc. We can further refine this by removing all entries that refer to the GLIBC_2.2.5 version by appending grep -v 'GLIBC_2\.2\.5':

$ readelf --dyn-syms /bin/bash|grep -P '\WUND\W'|grep -v 'GLIBC_2\.2\.5'
     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND 
     2: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __ctype_toupper_loc@GLIBC_2.3 (3)
     3: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND tgetflag@NCURSES_TINFO_5.0.19991023 (4)
     6: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __snprintf_chk@GLIBC_2.3.4 (5)
    14: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __vfprintf_chk@GLIBC_2.3.4 (5)
    20: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND _ITM_deregisterTMCloneTab
    22: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND tgetent@NCURSES_TINFO_5.0.19991023 (4)
    25: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND tputs@NCURSES_TINFO_5.0.19991023 (4)
    37: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND faccessat@GLIBC_2.4 (6)
    50: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND tgoto@NCURSES_TINFO_5.0.19991023 (4)
    60: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND eaccess@GLIBC_2.4 (6)
    63: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __stack_chk_fail@GLIBC_2.4 (6)
    72: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __fdelt_chk@GLIBC_2.15 (7)
    80: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND tgetnum@NCURSES_TINFO_5.0.19991023 (4)
    98: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND tgetstr@NCURSES_TINFO_5.0.19991023 (4)
   101: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __asprintf_chk@GLIBC_2.8 (8)
   104: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __memmove_chk@GLIBC_2.3.4 (5)
   106: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __memcpy_chk@GLIBC_2.3.4 (5)
   108: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND __gmon_start__
   114: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND memcpy@GLIBC_2.14 (9)
   138: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND regexec@GLIBC_2.3.4 (5)
   145: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __vsnprintf_chk@GLIBC_2.3.4 (5)
   147: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __strncpy_chk@GLIBC_2.3.4 (5)
   153: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __strcpy_chk@GLIBC_2.3.4 (5)
   157: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __printf_chk@GLIBC_2.3.4 (5)
   160: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __longjmp_chk@GLIBC_2.11 (11)
   195: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __fprintf_chk@GLIBC_2.3.4 (5)
   198: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND _ITM_registerTMCloneTable
   215: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __ctype_tolower_loc@GLIBC_2.3 (3)
   216: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __ctype_b_loc@GLIBC_2.3 (3)
   219: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __sprintf_chk@GLIBC_2.3.4 (5)

The 2.2.5 version was the first to support x86-64 as an architecture, which is why we're not interested in it. The first available version will never pose an issue.

However, if you want this Bash binary on a system with "only" glibc 2.14 it would not work, because __fdelt_chk@GLIBC_2.15 requires at least version 2.15.

Interlude: symbol versioning

The @GLIBC_2.3.4 (etc.) suffix on the symbol names describe version ranges (also see here). This enables an ELF shared object to support multiple versions of a symbol. As an example a function foo() may have taken 2 arguments in version 1.0 of the library but 3 in the 2.x version range. The fact that software dynamically linking to these symbols contains the symbol version, means that it will always be linked to the appropriate version of a function.

However, the downside is what you encountered. Software linked on a system with a newer glibc (or really any other library also using symbol versioning) won't run on your (older) system if one of the symbols used would require a newer library version than is available on your system.

The classical method to "overcome" this issue was always by building on a system that was old enough to provide a low enough common denominator as far as library versions were concerned. This even allowed you to some extent to run a binary built on one distro to run on a range of others. The downside is/was that this means older compiler, older toolchain, older libraries (because there are more libraries than just the C runtime).

Certain alternatives exist (see below), but they all require that you analyze exactly what it is you want. For example statically linking to musl-libc - which comes at more liberal licensing terms - won't work if your program offers a plugin interface and exchanges buffers with the plugins ... dynamically linking to the same C runtime is important in such a case. Besides, musl-libc and glibc can interfere with each other in the same process because of sbrk.

Possible solutions to your conundrum

  • Run your software inside a VM on a more modern distro version which satisfies the library dependencies out of the box. Because the VM lets you run any kernel you desire, this will even work for software requiring very modern system calls.
  • Run your software inside a chroot jail or a container (similar to the VM theme above, but here you could run into issues if the code running inside makes use of newer system calls not available on your host kernel, LXD 4.0 attempts to mitigate this issue by providing stubs for these system calls).
  • Use an AppImage (someone needs to take care that the stub of the AppImage is as backwards compatible as possible, though.
  • Use a snap package.

More involved solutions, or if you are a developer

  • Offer a newer glibc version alongside the old one. Since this is a daemon there's a chance something gets to start it. Whether it is systemd or good old SysV init, you should be able to set LD_LIBRARY_PATH to point it to your updated glibc.
  • If you were the maintainer of said software, this approach would provide a viable alternative. What it does is to instruct the linker to choose an earlier version of the same symbol instead of the newest (picking the newest is the default).
    There is a project on GitHub under the name wheybags/glibc_version_header, which attempts to formalize this and may get you kickstarted.
    • This is a variation on the above approach.
    • This provides some more details on how to investigate the matter yourself.
    • This shows how to investigate the symbol version ranges required by a binary and the answer sheds some further light on the matter.
  • There used to be a project called autopackage which effectively used this very method in a wrapper apgcc that came with it. There are a number of places where you can still download the respective files to glean implementation details.
  • So far the most nuanced explanation is this one. The new memcpy as of glibc 2.14 is a GNU_IFUNC, which means that once at runtime the most efficient version (e.g. optimized for a particular processor model!) will be picked. That's opposed to the classic way of simply providing a direct reference to the function (to be relocated). The main takeaway from this is that you can't just tinker with the symbol name in this particular case, as this form of "delay-loading" mechanism has an ABI different from the one for the older versions of said symbol.
    • This is another explanation by the same user.

If you're actually interested in the internal workings of linkers you can grab a book on the subject matter or refer to Ian Lance Taylors excellent article series of which you can find an overview here.

🌐
GitHub
github.com › microsoft › vscode › issues › 155474
version `GLIBC_2.25' not found in centos 7 for vscode server · Issue #155474 · microsoft/vscode
July 18, 2022 - /usr/local/bin/code-server: /lib64/libc.so.6: version `GLIBC_2.25' not found (required by /usr/local/bin/code-server) /usr/local/bin/code-server: /lib64/libc.so.6: version `GLIBC_2.18' not found (required by /usr/local/bin/code-server)
Author   microsoft
🌐
Red Hat
access.redhat.com › discussions › 3244811
Red Hat Customer Portal - Access to 24x7 support and knowledge
/bin/ksh: /lib64/libm.so.6: version `GLIBC_2.23' not found (required by /bin/ksh)
🌐
Cylab
cylab.be › blog › 388 › a-solution-to-version-glibc-2xx-not-found
A Solution to Version GLIBC_2.XX Not Found | cylab.be
Once you have the required glibc version installed locally, you can run your binary using the custom library by setting either the LD_PRELOAD or LD_LIBRARY_PATH environment variables. The LD_PRELOAD environment variable forces the dynamic linker to load a specific library before any other libraries. You can specify the full path to the required libc.so.6.
🌐
Nagios
support.nagios.com › board index › community support forums for nagios open source projects › open source nagios projects
/lib64/libc.so.6: version `GLIBC_2.14' not found - Nagios Support Forum
Specifically it looks like you have the epel version, so let's check a few more things just to be sure: yum repolist all | grep enabled >> /tmp/log yum info *nagios* >> /tmp/log yum info *glibc* >> /tmp/log Those will put out a good bit of data, so please attach the /tmp/log file.
🌐
Docker Community
forums.docker.com › docker engine › compose
/lib64/libc.so.6: version `GLIBC_2.32' not found - Compose - Docker Community Forums
August 8, 2023 - ./application: /lib64/libc.so.6: ... `GLIBC_2.34' not found (required by ./application) It seems the reason is the difference in build and run environments w.r.t. glibc as described at......
🌐
Reddit
reddit.com › r/hpc › how to solve glibc version incompatible issue?
r/HPC on Reddit: How to solve GLIBC version incompatible issue?
January 17, 2023 -

The following error is throwed when I run deno on a Centos 7 hpc cluster,

/lib64/libc.so.6: version `GLIBC_2.18' not found

Most solutions I found on the internet is either use container or some complicated setup. I know that I could workaround this problem by building a singularity container. But I am just wondering is there any easier way to fix this problem, for example, by creating a environment module to override the default libc.so?