I've tried a python application on my CentOS machine and it gives me the following error:
ImportError: /usr/lib64/libc.so.6: version `GLIBC_2.18' not found (required by /tmp/_MEI2BYIr4/libstdc++.so.6)
I've been tempted to upgrade GLIBC, but after having read some forums it seems I could break the system. Do you know any alternative?
Thanks
Best Answer
Check it is actually needed
Firstly check the python application as it could be out of date and is probably misreading the
glibc
version. CentOS shows the base version as installed and is patched to keep up with changes and it could just be a case of fixing the version that is being looked for in the code as a quick fix, but if the application is being actively developed you need to let the developers know or fork it for yourself if you can.An up to date
glibc
on CentOS 7 should be2.17-196.el7_4.2
If it is needed, Containerise
If it's absolutely necessary to run this application, the official RHEL approach would be to containerize, but you would still need to provide a working glibc, which wouldn't be possible with stock CentOS 7.
As a last resort, install
glibc
in a nonstandard locationIf this isn't viable, and as an absolute last resort, it is possible to install a newer version of
glibc
than 2.18 as that is 9 years old now andglibc
has been updated for several vulnerabilities and I'm not sure off the top of my head if it will build with the version ofmake
in CentOS 7, but any newer version should work as follows:You can build the version of
glibc
you require elsewhere on your server and add it toLD_LIBRARY_PATH
for the application. Note this must only be done for the application only.Then to run a binary you need to use
patchelf
to update its interpreterAnd you need to enable it to find the new glibc library, either by
Or you can use
patchelf
to update the binary's rpath (you can combine this with the previouspathelf
command)If you change
LD_LIBRARY_PATH
don't export it for the whole system because all the binaries unmodified bypatchelf
will segfault./opt
is the standard place to install third-party applications and libraries but you can use any path away from the system paths.