linux解决报错 libstdc++.so.6: version GLIBCXX_3.4.30 not found

最近使用的机器有多人操作,gcc 被其他人使用apt-get更新过了,导致需要使用 gcc 进行编译的工程在编译过程中出现libstdc++.so.6: version 'GLIBCXX_3.4.30' not found的报错。这个工程之前是可以正常编译的,猜测是更新之后,相应的文件丢失了或者是文件(动态链接指向的文件)出问题。

  • 根据报错信息查看libstdc++.so.6文件的详细信息:
bash 复制代码
ls -al /path/to/libstdc++.so.6  # 这里 /path/to/libstdc++.so.6 在报错信息中会给出

应该可以看到是一个软连接,那么就和我们前面的猜测一致了,是动态链接指向的文件出问题了。

  • 利用strings命令看一下指向的文件其GLIBCXX的东西是否能对应上(由于在编译工程的时候已经出现了报错,那么必然是对应不上的了,也就是查询的结果为空)
bash 复制代码
strings libstdc++.so.6 | grep GLIBCXX_3.4.30
# 不会有任何输出
  • 从系统其他地方找符合要求的libstdc++.so.6,可以使用locate命令快速查找:
bash 复制代码
locate libstdc++.so.6
# 应该会出来一堆的结果
  • locate命令的一堆输出中,找到/usr/lib/x86_64-linux-gnu这一条,并使用string命令看一下其GLIBCXX的东西
bash 复制代码
strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX_3.4.30

# 输出内容:GLIBCXX_3.4.30
  • 重新创建软链接/path/to/libstdc++.so.6,时其指向/usr/lib/x86_64-linux-gnu/libstdc++.so.6
bash 复制代码
rm /path/to/libstdc++.so.6
ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /path/to/libstdc++.so.6

不出意外的话,到这里前面的编译报错就不会出现了。

在多用户的机器上,在需要使用和系统自带的版本不同的软件的时候,可以把需要的版本的软件安装到自己账户的home目录下,再通过设置环境变量了指定软件的位置即可,这样既不影响其他用户,也不会被其他用户影响。

------------ 沃·兹基硕德

相关推荐
测试员周周3 小时前
【Appium 系列】第16节-WebView-H5上下文切换 — 混合应用的自动化难点
运维·开发语言·人工智能·功能测试·appium·自动化·测试用例
杜子不疼.5 小时前
【C++ AI 大模型接入 SDK】 - DeepSeek 模型接入(上)
开发语言·c++·chatgpt
小鹏linux6 小时前
Ubuntu 22.04 部署开源免费具有精美现代web页面的Casdoor账号管理系统
linux·前端·ubuntu·开源·堡垒机
在角落发呆7 小时前
Linux转发配置:解锁网络互联的核心密码
linux·运维·网络
石山代码7 小时前
C++ 内存分区 堆区
java·开发语言·c++
齐潇宇7 小时前
Zabbix 7 概述与配置
linux·zabbix·监控告警
裴东青8 小时前
10-实战:RuoYi-Cloud的自动化发布
运维·ci/cd·自动化
江公望8 小时前
Ubuntu htop命令,10分钟讲清楚
linux·服务器
哎呦,帅小伙哦8 小时前
Linux 时间:从原子钟到 clock_gettime 的每一面
linux·运维·服务器
sxgzzn9 小时前
新能源场站数智化转型:基于数字孪生与AI的智慧运维管理平台解析
大数据·运维·人工智能