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

打印 上一主题 下一主题

主题 556|帖子 556|积分 1668

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


  • 根据报错信息查看libstdc++.so.6文件的详细信息:
  1. ls -al /path/to/libstdc++.so.6  # 这里 /path/to/libstdc++.so.6 在报错信息中会给出
复制代码
应该可以看到是一个软连接,那么就和我们前面的猜测一致了,是动态链接指向的文件出问题了。


  • 利用strings下令看一下指向的文件其GLIBCXX的东西是否能对应上(由于在编译工程的时间已经出现了报错,那么必然是对应不上的了,也就是查询的结果为空)
  1. strings libstdc++.so.6 | grep GLIBCXX_3.4.30
  2. # 不会有任何输出
复制代码


  • 从系统其他地方找符合要求的libstdc++.so.6,可以使用locate下令快速查找:
  1. locate libstdc++.so.6
  2. # 应该会出来一堆的结果
复制代码


  • 从locate下令的一堆输出中,找到/usr/lib/x86_64-linux-gnu这一条,并使用string下令看一下其GLIBCXX的东西
  1. strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX_3.4.30
  2. # 输出内容:GLIBCXX_3.4.30
复制代码


  • 重新创建软链接/path/to/libstdc++.so.6,时其指向/usr/lib/x86_64-linux-gnu/libstdc++.so.6
  1. rm /path/to/libstdc++.so.6
  2. ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /path/to/libstdc++.so.6
复制代码
不出意外的话,到这里前面的编译报错就不会出现了。
在多用户的机器上,在须要使用和系统自带的版本差别的软件的时间,可以把须要的版本的软件安装到本身账户的home目次下,再通过设置情况变量了指定软件的位置即可,这样既不影响其他用户,也不会被其他用户影响。
———— 沃·兹基硕德

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

我可以不吃啊

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表