linux系统维护篇:centos7.9桌面环境安装百度网盘客户端(libstdc++.so.6: version `GLIBCXX_3.4.20‘ not found)

1、官网下载linux版本rpm包

https://pan.baidu.com/download

2、上传到服务进行安装

[root@dukeServer ~]# rpm -ivh baidunetdisk-3.5.0.x86_64.rpm

 

会遇到需要依赖包报错,这是使用yum 安装缺失的依赖包。

或者

[root@dukeServer ~]# yum -y install baidunetdisk-3.5.0.x86_64.rpm

直至安装成功

3、启动百度云盘报错

提示:

libstdc++.so.6: version `GLIBCXX_3.4.20' not found

查看:

[root@dukeServer ~]# strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX

GLIBCXX_3.4

GLIBCXX_3.4.1

GLIBCXX_3.4.2

GLIBCXX_3.4.3

GLIBCXX_3.4.4

GLIBCXX_3.4.5

GLIBCXX_3.4.6

GLIBCXX_3.4.7

GLIBCXX_3.4.8

GLIBCXX_3.4.9

GLIBCXX_3.4.10

GLIBCXX_3.4.11

GLIBCXX_3.4.12

GLIBCXX_3.4.13

GLIBCXX_3.4.14

GLIBCXX_3.4.15

GLIBCXX_3.4.16

GLIBCXX_3.4.17

GLIBCXX_3.4.18

GLIBCXX_3.4.19

GLIBCXX_DEBUG_MESSAGE_LENGTH

缺失高版本3.4.20,在尝试安装3.4.20,

 yum provides libstdc++.so.6

无果。

最终下载到一个更高版本

libstdc.so_.6.0.26.zip

点击下载

将其解压后,拷贝到/usr/lib64/  路径下,在创建软连接后解决问题。

#拷贝

[root@dukeServer ~]# cp -ri /home/softwares/libstdc++.so.6.0.26 /usr/lib64/

#备份原来的软连接

[root@dukeServer ~]# mv /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6.bak

#创建软连接

[root@dukeServer ~]# ln -s /usr/lib64/libstdc++.so.6.0.26 /usr/lib64/libstdc++.so.6

再次查看:

[root@dukeServer ~]# strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX

GLIBCXX_3.4

GLIBCXX_3.4.1

GLIBCXX_3.4.2

GLIBCXX_3.4.3

GLIBCXX_3.4.4

GLIBCXX_3.4.5

GLIBCXX_3.4.6

GLIBCXX_3.4.7

GLIBCXX_3.4.8

GLIBCXX_3.4.9

GLIBCXX_3.4.10

GLIBCXX_3.4.11

GLIBCXX_3.4.12

GLIBCXX_3.4.13

GLIBCXX_3.4.14

GLIBCXX_3.4.15

GLIBCXX_3.4.16

GLIBCXX_3.4.17

GLIBCXX_3.4.18

GLIBCXX_3.4.19

GLIBCXX_3.4.20

GLIBCXX_3.4.21

GLIBCXX_3.4.22

GLIBCXX_3.4.23

GLIBCXX_3.4.24

GLIBCXX_3.4.25

GLIBCXX_3.4.26

GLIBCXX_DEBUG_MESSAGE_LENGTH

_ZNKSt14basic_ifstreamIcSt11char_traitsIcEE7is_openEv@GLIBCXX_3.4

_ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEv@@GLIBCXX_3.4.5

_ZNKSbIwSt11char_traitsIwE

可以了。搞定。百度云也能正常启动使用了。

<think>嗯,用户现在遇到了另一个问题,是关于在CentOS 7上运行dotnet时出现的GLIBCXX版本缺失的问题。之前他们可能已经按照之前的指导安装.NET SDK,但现在运行的时候报错缺少GLIBCXX_3.4.203.4.21。我需要先理解这个错误的原因。 首先,GLIBCXX是GNU C++标准库的一部分,这些版本符号通常由libstdc++.so.6提供。CentOS 7自带的GCC版本可能比较旧,导致支持的GLIBCXX版本不够新。而.NET SDK 8.0可能需要更新的C++库支持,所以才会出现这个问题。 接下来,我需要考虑用户的系统环境。CentOS 7默认的GCC版本是4.8.5,对应的libstdc++.so.6可能只支持到GLIBCXX_3.4.19,而用户需要的3.4.203.4.21可能需要更高版本的GCC,比如GCC 5或更高版本。因此,解决方案可能需要升级libstdc++或者安装更新的GCC版本。 但CentOS 7的官方仓库可能不提供这些较新的软件包,所以用户可能需要启用额外的仓库,比如EPEL或者第三方仓库如SCL(Software Collections)。或者,用户可能需要手动编译安装GCC,但这比较复杂,容易出错。 另外,用户可能已经尝试过安装.NET SDK,但此时遇到了依赖问题,所以需要给出明确的步骤来检查和升级这些库。我需要列出具体的命令,比如如何检查当前支持的GLIBCXX版本,如何安装devtoolset-9或更高版本,或者如何手动下载更新的libstdc++库。 此外,还要考虑到用户可能不希望升级整个系统的GCC,所以使用SCL可能是一个更安全的选择,允许他们在需要时启用新版本的GCC而不影响系统全局。同时,需要提醒用户如果手动替换libstdc++.so.6可能会有风险,导致系统不稳定,所以要谨慎操作,并建议备份。 还有一种可能是用户的环境中没有正确配置动态库路径,可能需要更新ldconfig或者设置LD_LIBRARY_PATH,但这种情况相对较少。另外,容器化部署也是一个备选方案,比如使用Docker镜像,这样可以避免系统库的兼容性问题。 总结下来,我需要分步骤引导用户:首先检查当前GLIBCXX版本,然后通过安装更高版本的GCC工具链来获取所需的库,或者手动安装更新的libstdc++,最后验证是否解决。同时,提供备用方案如容器化部署,以防前面的方法不可行。</think>在CentOS 7系统中运行.NET时出现`GLIBCXX_3.4.20`或`GLIBCXX_3.4.21`缺失的报错,是由于**系统默认GCC运行时库(libstdc++)版本过低**导致。以下是详细解决方案: --- ### **1. 原因分析** - **核心问题**:`.NET 8`依赖的`libstdc++.so.6`需要`GLIBCXX_3.4.20+`,而CentOS 7默认GCC 4.8.5仅支持到`GLIBCXX_3.4.19` - **直接表现**: ```bash strings /lib64/libstdc++.so.6 | grep GLIBCXX # 检查当前支持的版本 ``` 输出中缺少`GLIBCXX_3.4.20`及更高版本 --- ### **2. 标准解决方案:升级GCC工具链** #### 2.1 安装新版GCC(推荐使用SCL仓库) ```bash # 启用Software Collections (SCL) sudo yum install centos-release-scl # 安装GCC 9工具链(提供GLIBCXX_3.4.25) sudo yum install devtoolset-9-gcc devtoolset-9-gcc-c++ # 临时启用新工具链(当前会话生效) scl enable devtoolset-9 bash # 永久启用(所有用户生效) echo "source /opt/rh/devtoolset-9/enable" | sudo tee -a /etc/profile ``` #### 2.2 验证libstdc++版本 ```bash # 检查新版本路径 ls /opt/rh/devtoolset-9/root/usr/lib64/libstdc++.so.6 # 强制链接到系统库目录(谨慎操作!) sudo cp /opt/rh/devtoolset-9/root/usr/lib64/libstdc++.so.6* /usr/lib64/ sudo rm -f /usr/lib64/libstdc++.so.6 sudo ln -s /usr/lib64/libstdc++.so.6.0.28 /usr/lib64/libstdc++.so.6 # 更新动态链接库缓存 sudo ldconfig ``` --- ### **3. 替代方案:手动更新libstdc++** 若无法升级GCC,直接替换库文件: ```bash # 下载预编译的libstdc++.so.6.0.28(兼容CentOS 7) wget http://mirror.centos.org/centos/7/os/x86_64/Packages/libstdc++-4.8.5-44.el7.x86_64.rpm wget http://mirror.centos.org/centos/7/os/x86_64/Packages/libstdc++-devel-4.8.5-44.el7.x86_64.rpm # 强制安装(可能破坏依赖关系!) sudo rpm -Uvh --force libstdc++-*.rpm # 验证版本 strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX ``` --- ### **4. 容器化部署方案** 若系统升级风险过大,建议使用Docker容器: ```dockerfile # Dockerfile示例 FROM mcr.microsoft.com/dotnet/sdk:8.0-jammy AS build WORKDIR /src COPY . . RUN dotnet publish -c Release -o /app FROM mcr.microsoft.com/dotnet/aspnet:8.0-jammy WORKDIR /app COPY --from=build /app . ENTRYPOINT ["dotnet", "YourApp.dll"] ``` Ubuntu Jammy基础镜像已包含所需依赖。 --- ### **5. 关键风险提示** | 操作 | 风险等级 | 缓解措施 | |-----------------------|----------|------------------------------| | 强制替换libstdc++ | ⚠️ 高危 | 提前备份`/usr/lib64/libstdc++*` | | 启用SCL工具链 | ⚠️ 中低 | 仅限开发环境,生产环境建议容器化 | | 系统级GCC升级 | ⚠️ 高危 | 可能导致其他依赖链断裂 | --- ### **验证修复** ```bash # 检查GLIBCXX版本 strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX # 验证.NET运行 dotnet --list-runtimes dotnet your_app.dll ``` --- ### **最终建议** 1. **开发环境**:优先使用`devtoolset-9`临时工具链 2. **生产环境**:强制推荐容器化部署(Docker/Podman) 3. **长期方案**:考虑升级到CentOS Stream 8/9或迁移至Ubuntu LTS 通过以上步骤可解决GLIBCXX版本缺失问题。若仍有异常,建议检查`LD_LIBRARY_PATH`环境变量是否包含新版库路径。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值