【问题标题】:gcc: error while loading shared libraries -> looks up wrong library versiongcc:加载共享库时出错->查找错误的库版本
【发布时间】:2013-07-17 10:00:22
【问题描述】:

我升级了我的系统(到 ubuntu 13.04)并且在进程的某个地方 gcc 坏了 :-( 我在尝试编译某些东西时遇到了这个异常:

/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../x86_64-linux-gnu/bin/as:
error while loading shared libraries:
libopcodes-2.22-system.so: cannot open shared object file: No such file or directory

实际上 libopcodes-2.22-system.so 不存在,但 libopcodes-2.23.2-system.so 存在。 如果我从 2.22 到 2.23 的符号链接失败,只是另一个库。

所以由于某种原因它正在寻找错误的版本。我拼命尝试重装gcc、binutils、libc6等解决,但问题依然存在。

我如何告诉 gcc 使用正确的共享库版本? / gcc 从哪里获取要使用的共享库的信息?

谢谢

【问题讨论】:

  • gcc 不会自行寻找 2.22。您使用的其他一些库链接到 2.22。
  • 你知道有什么方法可以进一步调查吗?必须是系统库..我试图编译的代码是一个没有任何依赖关系的单行hello world。
  • gcc 执行失败。没有办法解决这个问题。您系统中的某些内容已损坏。我对ubuntu不熟悉。检查或重新安装 gcc 和 binutils 包。
  • 不要在库之间创建符号链接。库的主要版本特别更改,因为链接到新版本库的二进制文件由于不兼容的更改而无法与旧库一起使用。看起来要么是您的安装搞砸了,要么是构建软件包的人搞砸了。重新安装,直到问题消失。

标签: c++ c ubuntu gcc debian


【解决方案1】:

谢谢大家,你们的 cmets 让我看到了正确的地方。

这条路让我怀疑:

/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../x86_64-linux-gnu/bin/as

我认为它一定是/usr/bin/as 的符号链接,但它暴露了/usr/x86_64-linux-gnu/bin/usr/bin 的完整副本 - 不是最新的,因此包含错误链接的二进制文件。我不知道为什么整个 bin 目录的副本在那里并且被 gcc 用于支持/usr/bin

/usr/x86_64-linux-gnu 被删除后编译器运行良好。 编辑:最好在做同样的事情之前检查 cmets。

【讨论】:

  • 嗯,不确定您是否帮了自己一个忙…… Debian 前段时间切换到了多架构。看起来从 pre-multi-arch 的过渡出错了。
  • 谢谢,我会检查的。我没有删除该目录,而是将其移动到另一个位置,所以我可以恢复和更新它或类似的东西
猜你喜欢
  • 2012-08-10
  • 1970-01-01
  • 2011-05-29
  • 2015-06-28
  • 1970-01-01
相关资源
最近更新 更多