Post 升级 gcc 编译失败 - 找不到共享文件对象 (libmpc.so.2)
Post upgrade gcc compilation fails - cannot find shared file object (libmpc.so.2)
Post 从 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
无处可寻。
我试图寻找这个包,我已经检查了 Whosebug 和其他论坛上的所有帖子,但没有真正适用的解决方案。
我已经尝试重新安装 gcc 和 libmpc-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
我将路径 /usr/local/lib
添加到 conf 文件的底部,但我认为这没有用,因为我什至找不到 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.
等等,几个问题:
- 预升级一切正常。升级了什么
休息?
- 如何获取文件libmpc.so.2?您需要获取哪个软件包,我如何找到安装位置?
- 魔法字节是什么意思,我应该怎么做?在线资源表明这是一个错误?
感谢您抽出宝贵时间阅读本文,我是 linux 新手,非常感谢能得到的所有帮助。
编辑:愚蠢的是我忘了添加 gcc 的版本。 gcc --version returns
gcc (GCC) 4.8.3
魔术字节的东西可以忽略。 https://gcc.gnu.org/ml/gcc-help/2014-08/msg00053.html
可以使用 sudo apt-get install libmpc3 安装 libmpc [评论后编辑]
要完整回答这个问题,请 post 您正在使用的 gcc 版本,如果您手动尝试安装较新版本的 gcc 并且是否尝试清理构建再次编译前的目录?
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,因为它是为不同版本的 OS 构建的。它与 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 软件包安装的,也是您应该使用的那个。
Post 从 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
无处可寻。
我试图寻找这个包,我已经检查了 Whosebug 和其他论坛上的所有帖子,但没有真正适用的解决方案。
我已经尝试重新安装 gcc 和 libmpc-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
我将路径 /usr/local/lib
添加到 conf 文件的底部,但我认为这没有用,因为我什至找不到 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.
等等,几个问题:
- 预升级一切正常。升级了什么 休息?
- 如何获取文件libmpc.so.2?您需要获取哪个软件包,我如何找到安装位置?
- 魔法字节是什么意思,我应该怎么做?在线资源表明这是一个错误?
感谢您抽出宝贵时间阅读本文,我是 linux 新手,非常感谢能得到的所有帮助。
编辑:愚蠢的是我忘了添加 gcc 的版本。 gcc --version returns
gcc (GCC) 4.8.3
魔术字节的东西可以忽略。 https://gcc.gnu.org/ml/gcc-help/2014-08/msg00053.html
可以使用 sudo apt-get install libmpc3 安装 libmpc [评论后编辑]
要完整回答这个问题,请 post 您正在使用的 gcc 版本,如果您手动尝试安装较新版本的 gcc 并且是否尝试清理构建再次编译前的目录?
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,因为它是为不同版本的 OS 构建的。它与 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 软件包安装的,也是您应该使用的那个。