错误 version `GLIBC_2.18' not found

遇到报错如下:

 

升级GLIBC有风险,系统可能瘫痪:https://www.cnblogs.com/dartagnan/archive/2013/04/25/3042105.html

看到一个比较好的帖子:https://blog.youkuaiyun.com/sole_cc/article/details/51415940

产生原因
由于Linux系统的glibc版本太低,而软件编译时使用了较高版本的glibc引起的!

查看当前版本命令:strings /lib64/libc.so.6 | grep GLIBC

系统最高也就GLIBC_2.12

glibc是gnu发布的libc库,即c运行库,glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。

很多linux的基本命令,比如cp, rm, ll,ln等,都得依赖于它,如果操作错误或者升级失败会导致系统命令不能使用,严重的造成系统退出后无法重新进入,所以操作时候需要慎重。 

1、下载文件

下载地址http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz 


2、安装部署

解压

tar -zxvf  glibc-2.18.tar.gz

创建编译目录

cd glibc-2.28 

 mkdir build

编译、安装

cd build/

../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin

make -j 8

make install

strings /lib64/libc.so.6 | grep GLIBC

可以看到2.1X的旧库文件还在,多了新安装2.18版本的库文件,而且软链接文件全部指向了新装的版本。


删除libc.so.6的软链千万要小心!!!删了就只剩cd 、 pwd命令可以用了,删了libc.so.6软链,关了shell窗口,就打不开了(被问我是怎么知道的) 谢谢这位博主,附好文:http://devzc.com/post/440

 

 

 

 

<think>好的,我需要帮助用户解决MongoDB因缺少GLIBC_2.18GLIBC_2.25导致的运行问题。首先,我得回忆一下GLIBC的相关知识。GLIBC是GNU C库,系统上很多程序依赖它。如果版本不够,就会出现类似错误。用户提到mongod需要这两个版本,而系统当前可能没有安装或版本过低。 首先,应该检查当前系统的GLIBC版本。常用的方法是用命令`ldd --version`或者检查libc.so.6的符号链接。不过根据引用中的内容,用户可能已经通过类似`strings /lib/x86_64-linux-gnu/libm.so.6 | grep GLIBC_`的方式检查过,发现缺少所需的版本。 接下来,用户可能需要升级GLIBC。但升级GLIBC有一定风险,因为它属于系统核心组件,不当操作可能导致系统不稳定。根据引用[2]和[4],解决方案通常涉及下载GLIBC源码编译安装。引用[2]提到解压glibc-2.25.tar.gz,并进入目录进行编译。但需要注意编译时的配置选项,比如指定安装路径到非系统目录,避免覆盖系统原有的GLIBC,这可能导致系统崩溃。例如,可以创建glibc_build目录,配置时使用--prefix参数指定安装路径,如`../configure --prefix=/opt/glibc-2.25`,然后进行编译安装。 不过用户同时需要GLIBC_2.182.25,可能需要分别安装这两个版本。或者,更高版本的GLIBC可能已经包含之前版本的符号,所以安装较新的版本可能同时解决多个问题。需要确认的是,安装GLIBC-2.25是否能覆盖2.18的需求。如果不行,可能需要单独安装2.18,但这样可能会有冲突,需要谨慎处理。 另一种方法是使用静态链接的MongoDB版本,或者通过容器化技术(如Docker)来运行MongoDB,这样容器内可以包含所需的GLIBC版本,而无需修改宿主机系统。这可能更安全,但用户可能需要安装Docker并学习基本使用方法。 另外,引用[4]提到解决libstdc++.so.6的问题,可能与libc的版本有关联。可能需要同时更新libstdc++,但这通常是通过升级GCC或安装更新的libstdc++6包来实现的。但不同的Linux发行版有不同的包管理方式,用户可能需要根据他们的系统(如CentOS、Ubuntu等)选择合适的方法。 还需要注意,手动编译GLIBC后,可能需要设置环境变量LD_LIBRARY_PATH指向新安装的库路径,以便mongod能够找到它们。例如,在启动mongod前执行`export LD_LIBRARY_PATH=/opt/glibc-2.25/lib:$LD_LIBRARY_PATH`。但这种方法可能存在兼容性问题,尤其是当其他系统程序依赖原有GLIBC时。 总结可能的解决步骤:1)检查当前GLIBC版本;2)下载所需版本的GLIBC源码;3)编译安装到非系统目录;4)配置环境变量或使用patchelf工具修改mongod的库依赖路径;5)测试运行。或者,使用容器化方法避免系统修改。 同时,需要提醒用户操作风险,建议备份重要数据,并在测试环境中先行尝试。如果用户不熟悉系统编译,推荐使用Docker方式更为安全可靠。</think>### 解决MongoDB因缺少GLIBC_2.18GLIBC_2.25的运行问题 #### 1. 确认当前系统GLIBC版本 运行以下命令查看已安装的GLIBC版本: ```bash strings /lib/x86_64-linux-gnu/libm.so.6 | grep GLIBC_ ``` 若输出中缺少`GLIBC_2.18`或`GLIBC_2.25`,则需要手动升级GLIBC[^3]。 --- #### 2. 编译安装GLIBC_2.18GLIBC_2.25 **步骤说明**(需root权限): 1. **下载源码包**: ```bash wget http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz wget http://ftp.gnu.org/gnu/glibc/glibc-2.25.tar.gz ``` 2. **解压并编译安装**(以GLIBC_2.25为例): ```bash tar zxvf glibc-2.25.tar.gz cd glibc-2.25 mkdir glibc_build && cd glibc_build ../configure --prefix=/opt/glibc-2.25 # 指定安装路径,避免覆盖系统默认库 make -j4 && make install ``` *重复类似步骤编译GLIBC_2.18*[^2]。 3. **验证安装**: ```bash /opt/glibc-2.25/lib/libc.so.6 # 查看新安装的GLIBC版本 ``` --- #### 3. 配置MongoDB使用新GLIBC **方法一:通过环境变量指定库路径** 启动`mongod`时强制使用新版本库: ```bash export LD_LIBRARY_PATH=/opt/glibc-2.25/lib:/opt/glibc-2.18/lib:$LD_LIBRARY_PATH mongod --dbpath /your/data/directory ``` **方法二:修改二进制文件依赖(高风险)** 使用`patchelf`工具修改`mongod`的库链接路径: ```bash patchelf --set-rpath /opt/glibc-2.25/lib:/opt/glibc-2.18/lib /usr/bin/mongod ``` *此操作可能破坏程序兼容性,需谨慎*[^4]。 --- #### 4. 替代方案:使用Docker容器(推荐) 若担心系统稳定性,可通过Docker运行MongoDB: ```bash docker pull mongo:latest docker run --name mymongo -p 27017:27017 -v /mongo/data:/data/db -d mongo ``` 此方法无需修改宿主机GLIBC版本[^1]。 --- #### 注意事项 - **系统兼容性**:手动升级GLIBC可能导致其他程序崩溃,建议在测试环境操作。 - **备份数据**:操作前备份MongoDB数据目录。 - **依赖冲突**:若同时需要多个GLIBC版本,优先尝试安装更高版本(如2.25可能包含2.18的符号)。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值