【问题标题】:Post upgrade gcc compilation fails - cannot find shared file object (libmpc.so.2)升级后 gcc 编译失败 - 找不到共享文件对象 (libmpc.so.2)
【发布时间】:2015-09-18 11:27:32
【问题描述】:

从 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:加载共享库时出错:libmpc.so.2:无法打开共享对象文件:没有这样的文件或目录

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

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

我尝试重新安装 gcclibmpc-dev 并且它们完成后没有任何问题。如果我尝试重新安装 libmpc3 它不会显式失败,但返回的最终消息是:

/sbin/ldconfig.real:/usr/local/lib64/libstdc++.so.6.0.19-gdb.py 不是 ELF 文件 - 它的开头有错误的魔法字节。

我读到问题可能出在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 不是 ELF 文件 - 它的开头有错误的魔法字节。

还有几个问题:

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

感谢您抽出宝贵时间阅读本文,我是一名 linux 新手,因此感谢您能获得的所有帮助。

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

gcc (GCC) 4.8.3

【问题讨论】:

  • 似乎是安装问题。尝试启动export LD_LIBRARY_PATH="/usr/lib"; sudo ldconfig
  • 试过但遗憾的是没有改变。 ldconfig 命令返回魔术字节消息。
  • 我投票决定将此问题作为题外话结束,因为它应该发布在 askubuntu 中!
  • “我已经尝试重新安装 gcc 和 libmpc-dev,它们都没有问题。” 你是如何安装它们的?在 Ubuntu 14.04 the gcc package 依赖于 libmpc3 使用 libmpc.so.3 而不是 libmpc.so.2 所以我认为你以某种方式搞砸了升级。
  • 看我的回答,问题是你没有使用 gcc 包,你在 /usr/local 中使用了一些不兼容的手工构建版本使用您的新系统。

标签: c gcc ubuntu-14.04


【解决方案1】:

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 中的那个,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 包安装的,是你应该使用的。

【讨论】:

    【解决方案2】:
    1. 魔术字节的东西可以忽略。 https://gcc.gnu.org/ml/gcc-help/2014-08/msg00053.html

    2. 可以使用 sudo apt-get install libmpc3 安装 libmpc [注释后编辑]

    3. 要完整回答这个问题,您能否发布您正在使用的 gcc 版本,如果您手动尝试安装较新版本的 gcc,并且您是否尝试在再次编译之前清理构建目录?

    【讨论】:

    • 我很抱歉。版本是 gcc (GCC) 4.8.3。我也在问题中包含了这些信息。尝试安装 libmpc-dev,它已经安装,使用 --reinstall 标志完成,没有问题。
    • libmpc-dev 安装头文件和 .so 文件,而不是 .so.2 文件,它位于主(非开发)包中。
    猜你喜欢
    • 2013-05-25
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    • 2016-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多