c - 升级后 gcc 编译失败 - 找不到共享文件对象 (libmpc.so.2)

标签 c gcc ubuntu-14.04

从 Ubuntu 12.04 -> 14.04 升级后,gcc 编译失败。

使用的编译器和标志:

gcc -c -MMD -MP main.c -o main.o -std=gnu99 -lpthread -fstrict-overflow -Werror -Wall -Wshadow -Wstrict-overflow=5 -pedantic -O2 -lm -lpthread -lrt

返回的错误是:

/usr/local/libexec/gcc/x86_64-unknown-linux-gnu/4.8.3/cc1: error while loading shared libraries: libmpc.so.2: cannot open shared object file: No such file or directory

我查看了这个位置,找不到 libmpc.so.2

我试图寻找这个包,我已经检查了 stackoverflow 和其他论坛上的所有帖子,但没有真正适用的解决方案。

我已经尝试重新安装 gcclibmpc-dev 并且它们没有问题地完成。如果我尝试重新安装 libmpc3 它不会明确失败,但返回的最终消息是:

/sbin/ldconfig.real: /usr/local/lib64/libstdc++.so.6.0.19-gdb.py is not an ELF file - it has the wrong magic bytes at the start.

我读到问题可能出在 LD_LIBRARY_PATH 环境变量(echo 没有返回任何内容),所以我在 /etc/ld.so.conf 中设置了它,其中包含以下行:

include /etc/ld.so.conf.d/*.conf

我在 conf 文件的底部添加了路径 /usr/local/lib,但我想那是没用的,因为我什至找不到 libmpc.so.2 更不用说将 gcc 指向正确的位置了。但是,在尝试通过运行 ldconfig 更新动态加载程序缓存后,将返回以下行:

/sbin/ldconfig.real: /usr/local/lib64/libstdc++.so.6.0.19-gdb.py is not an ELF file - it has the wrong magic bytes at the start.

所以,有几个问题:

  1. 预升级一切正常。升级了什么 休息?
  2. 如何获取文件libmpc.so.2?您需要获取哪个软件包?我如何找到安装位置?
  3. 魔术字节是怎么回事,我应该怎么做?在线资源表明这是一个错误?

感谢您花时间阅读本文,我是 Linux 新手,所以非常感谢能得到的所有帮助。

编辑:愚蠢的是我忘了添加 gcc 的版本。 gcc --version 返回

gcc (GCC) 4.8.3

最佳答案

GCC 文件的路径是 /usr/local/libexec/gcc/x86_64-unknown-linux-gnu/4.8.3/cc1 这表明它在 /usr/local 和系统包永远不会安装在 /usr/local

这意味着有人在旧的 Ubuntu 12.04 系统中手动安装了 GCC 4.8.3。既然你已经更新了你的系统,你就不能使用那个 GCC,因为它是为不同版本的操作系统构建的。它与 libmpc.so.2 相关联,但该文件在 Ubuntu 14.04 中不存在,无法使用 apt 安装。

从 Ubuntu 存储库安装 GCC 并停止使用 /usr/local 中的 GCC,14.04 的最新 GCC 是 4.8.4,无论如何都较新:

http://packages.ubuntu.com/trusty-updates/gcc-4.8

这将安装一个工作编译器,该编译器使用 14.04 中存在的 libmpc 版本(即 libmpc.so.3)

您可能应该删除 /usr/local/ 中的整个 GCC 安装,或者至少从您的 PATH 中删除它,这样它就不会被使用。

在 shell 提示符下键入 type -a gcc 将向您显示 PATH 中的所有 gcc 可执行文件,我预计会显示:

/usr/local/bin/gcc
/usr/bin/gcc

第一个是您正在使用的损坏版本,但与升级后的系统不兼容。第二个是由 gcc 软件包安装的,也是您应该使用的。

关于c - 升级后 gcc 编译失败 - 找不到共享文件对象 (libmpc.so.2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32650904/

相关文章:

python - 尝试运行 bokeh-server 时出错

apache - .htaccess 被忽略 - Ubuntu 14.04

c - 将 "== 0"与 "IF"语句一起使用

c - 为什么我们需要在 block 宏周围加上括号?

c - 在 C 中接受单个字符?

c - GCC pragma 优化不覆盖 `-Og` 命令行设置

c - 错误: array initializer must be an initializer list or wide string literal in C Merge Sort program

c - 如何获得使用递归的警告?

linux - 迁移具有相同权限的挂载不起作用

c - 为什么 gcc 为我展开的循环结语生成的代码看起来过于复杂?