问题一
checking for a sed that does not truncate output... /bin/sed configure: error: "" shall be a valid directory Makefile:6881: recipe for target 'configure-stage1-mpfr' failed make[2]: *** [configure-stage1-mpfr] Error 1 make[2]: Leaving directory '/root/gcc-14.1.0/build' Makefile:28795: recipe for target 'stage1-bubble' failed make[1]: *** [stage1-bubble] Error 2 make[1]: Leaving directory '/root/gcc-14.1.0/build' Makefile:1107: recipe for target 'all' failed make: *** [all] Error 2
原因:错误信息显示在配置阶段出现了问题,具体是因为/bin/sed
命令检查失败,提示""(空字符串)不是一个有效的目录。
../configure --prefix=/usr/local --with-pkgversion='glibc gcc V14.1.0' --enable-checking=release --enable-languages=c,c++ --disable-multilib --enable-bootstrap --enable-threads=posix --with-system-zlib --with-gmp=$GMP_HOME --with-mpfr=$MPFR_HOME
我的系统中路径要具体指明,不能使用这种概述符 $GMP_HOME $MPFR_HOME
解决方法: 重新改了configure的命令的路径重新配置configure../configure --prefix=/usr/local --with-pkgversion='glibc gcc V14.1.0' --enable-checking=release --enable-languages=c,c++ --disable-multilib --enable-bootstrap --enable-threads=posix --with-system-zlib --with-gmp=/root/gcc-14.1.0/gmp --with-mpfr=/usr/local/mpfr
问题二
checking for recent GMP... yes checking for recent MPFR... no configure: error: MPFR version >= 4.1.0 required Makefile:7940: recipe for target 'configure-stage1-mpc' failed make[2]: *** [configure-stage1-mpc] Error 1 make[2]: Leaving directory '/root/gcc-14.1.0/build' Makefile:28795: recipe for target 'stage1-bubble' failed make[1]: *** [stage1-bubble] Error 2 make[1]: Leaving directory '/root/gcc-14.1.0/build' Makefile:1107: recipe for target 'all' failed make: *** [all] Error 2
原因: GCC 编译配置过程中检测到 GMP(GNU 多精度库)是最新的,但是没有找到满足要求的 MPFR(GNU 多精度浮点运算库)版本。错误信息指出需要 MPFR 版本 4.1.0 或更高版本。
解决方法: 1. 确认 MPFR 版本:首先,您需要确认系统中安装的 MPFR 版本。可以使用以下命令来检查:
mpfr --version
-
安装或更新 MPFR:如果系统中没有安装 MPFR,或者安装的版本低于 4.1.0,您需要安装或更新到满足要求的版本。可以使用包管理器来安装或更新 MPFR,例如在 Ubuntu 上,您可以使用:
sudo apt-get update sudo apt-get install libmpfr-dev
-
设置 MPFR_HOME:如果 MPFR 已经安装,但是
configure
脚本没有找到,您可能需要设置MPFR_HOME
环境变量,指向 MPFR 的安装目录。例如:export MPFR_HOME=/usr/include/mpfr
注意,上面的路径是示例,您需要根据实际的安装路径进行设置。
-
重新运行 configure 脚本:在更新 MPFR 或设置
MPFR_HOME
后,重新运行 GCC 的configure
脚本。 -
清理构建目录:如果之前尝试编译失败,建议清理构建目录,然后重新开始编译过程:
cd /root/gcc-14.1.0/build make clean cd .. ./configure [您的其他参数] make
问题三
root@ubuntu:~/gcc-14.1.0/build# file /usr/lib/x86_64-linux-gnu/libmpfr.so.4 /usr/lib/x86_64-linux-gnu/libmpfr.so.4: symbolic link to libmpfr.so.4.1.4
/root/gcc-14.1.0/build/./gcc/xgcc -B/root/gcc-14.1.0/build/./gcc/ -fno-checking -xc -nostdinc /dev/null -S -o /dev/null -fself-test=../../gcc/testsuite/selftests /root/gcc-14.1.0/build/./gcc/cc1: error while loading shared libraries: libmpfr.so.6: cannot open shared object file: No such file or directory ../../gcc/c/Make-lang.in:153: recipe for target 's-selftest-c' failed make[3]: *** [s-selftest-c] Error 1
原因: 既然 libmpfr-dev
已经是最新版本,但是 mpfr --version
命令仍然提示找不到命令,这可能意味着虽然库已经安装,但是它的可执行文件没有正确地加入到系统的 PATH 环境变量中。
解决方法:
软连接:ln -s 源文件 目标文件
硬链接:ln 源文件 目标文件
sudo ln -s /usr/local/lib/libxxx.so.1.1 /usr/local/lib/libxxx.so
问题四
build/genautomata.o build/rtl.o build/read-rtl.o build/ggc-none.o build/vec.o build/min-insn-modes.o build/gensupport.o build/print-rtl.o build/hash-table.o build/sort.o build/read-md.o build/errors.o ../build-x86_64-pc-linux-gnu/libiberty/libiberty.a -lm build/genautomata ../../gcc/common.md ../../gcc/config/i386/i386.md \ insn-conditions.md > tmp-automata.cc /bin/bash: line 1: 67886 Killed build/genautomata ../../gcc/common.md ../../gcc/config/i386/i386.md insn-conditions.md > tmp-automata.cc Makefile:2605: recipe for target 's-automata' failed make[3]: *** [s-automata] Error 137 make[3]: Leaving directory '/root/gcc-14.1.0/build/gcc' Makefile:5061: recipe for target 'all-stage1-gcc' failed make[2]: *** [all-stage1-gcc] Error 2 make[2]: Leaving directory '/root/gcc-14.1.0/build' Makefile:28795: recipe for target 'stage1-bubble' failed make[1]: *** [stage1-bubble] Error 2 make[1]: Leaving directory '/root/gcc-14.1.0/build' Makefile:1107: recipe for target 'all' failed make: *** [all] Error 2
原因: 错误信息显示在尝试构建 GCC 时,genautomata
程序因为某些原因被系统终止了(通常是由于内存不足或其它资源限制),这导致构建过程中止,并返回了错误代码。
如果系统内存不足,可能会导致构建过程中的程序被系统终止。检查系统的内存使用情况,如果需要,尝试关闭一些应用程序释放内存,然后重新运行 make
。
解决方法
在开机界面的编辑虚拟机设置中调整内存的大小,注意一定要关机之后才能设置,不然开机过程中能调整的内存是很小的,编译时候3G的内存是不够用的
或者可以通过以下的方法:先查看一下内存的分布
root@ubuntu:~/gcc-14.1.0/build# free -mt
total used free shared buff/cache available
Mem: 974 446 286 13 241 333
Swap: 1020 503 517
Total: 1995 949 804
根据提供的 free -mt
命令的输出,我们可以解读内存使用情况如下:
-
Mem(物理内存):
total
: 总共约有 974MB 的物理内存。used
: 已使用约 446MB,包括正在使用和缓冲/缓存的内存。free
: 空闲内存约 286MB,这部分内存是直接可用的。shared
: 共享内存约 13MB,这部分内存可以被多个进程共享。buff/cache
: 用作缓冲和缓存的内存约 241MB,这部分内存可以提高系统性能,当系统需要更多可用内存时,它可以被回收使用。available
: 大约有 333MB 的内存是可用的,即系统可以不使用交换空间就能提供给新的应用程序使用的内存量。
-
Swap(交换空间):
- 交换空间总共有 1020MB,目前已使用 503MB,剩余 517MB。
-
Total(内存和交换空间总计):
- 总计有 1995MB 的内存和交换空间,其中 949MB 已被使用,剩余 804MB 可用。
从这些数据来看,您的系统有接近 1/3 的物理内存是空闲的,但是只有 333MB 是立即可用的(available
),这可能会在运行内存密集型任务时导致问题。如果您正在尝试编译 GCC 或其他大型软件,可能需要更多的可用内存。
这里有几个建议可以帮助您改善内存使用情况:
-
关闭不必要的应用程序:确保没有不必要的应用程序或服务正在运行并占用内存。
-
增加交换空间:如果您经常遇到内存不足的问题,可以考虑增加交换空间。
-
优化内存使用:使用内存优化工具或脚本来减少内存占用。
-
升级硬件:如果经常需要处理内存密集型任务,考虑增加物理内存。
-
分阶段构建:如果您正在编译软件,尝试分阶段进行,每个阶段完成后清理临时文件。
-
使用内存分析工具:使用工具如
valgrind
来分析内存使用情况,找出内存泄漏或其他问题。 -
调整
vm.swappiness
:根据需要调整vm.swappiness
值,以控制系统使用交换空间的倾向性。 -
监控系统:使用
top
、htop
或glances
等工具实时监控系统资源使用情况。
问题六
/root/gcc-14.1.0/build/./gcc/xgcc -B/root/gcc-14.1.0/build/./gcc/ -fno-checking -xc -nostdinc /dev/null -S -o /dev/null -fself-test=../../gcc/testsuite/selftests /root/gcc-14.1.0/build/./gcc/cc1: error while loading shared libraries: libmpfr.so.6: cannot open shared object file: No such file or directory ../../gcc/c/Make-lang.in:153: recipe for target 's-selftest-c' failed make[3]: *** [s-selftest-c] Error 1 make[3]: Leaving directory '/root/gcc-14.1.0/build/gcc' Makefile:5061: recipe for target 'all-stage1-gcc' failed make[2]: *** [all-stage1-gcc] Error 2
原因: 尽管您已经安装了 libmpfr
,但是构建 GCC 时仍然报告找不到 libmpfr.so.6
。这表明可能存在一些配置问题,导致 GCC 无法找到正确的库文件。
检查 LD_LIBRARY_PATH
: 使用 echo $LD_LIBRARY_PATH
来查看当前的环境变量值。如果输出不包含 libmpfr
库的路径,您需要添加它:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/libmpfr
替换 `/path/to/libmpfr` 为实际的库文件路径。
解决方法:
设置 LD_LIBRARY_PATH
永久性,要使这个环境变量的更改永久生效,您可以将上述 export
命令添加到您的用户目录下的 .bashrc
或 .profile
文件中(注意要以root的身份修改.bashrc
或 .profile
)
要修改这个文件以永久设置 LD_LIBRARY_PATH
,您可以按照以下步骤操作:
-
打开文件: 使用文本编辑器打开
/etc/profile
文件。由于这是系统级别的配置文件,您需要管理员权限。您可以使用sudo
命令来编辑它,例如使用nano
编辑器:sudo nano /etc/profile
-
添加
LD_LIBRARY_PATH
: 在文件的适当位置添加以下行,以设置LD_LIBRARY_PATH
。确保替换/path/to/libmpfr
为实际的libmpfr
库文件路径:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/libmpfr
通常,
libmpfr
库可能位于/usr/lib
或/usr/local/lib
等目录。您可以使用locate libmpfr.so
或find / -name "libmpfr*"
命令来找到正确的路径。 -
保存并关闭文件: 在
nano
中,您可以通过按Ctrl+O
来保存更改,然后按Ctrl+X
退出编辑器。 -
使更改生效: 更改
/etc/profile
或其他系统级配置文件后,您需要所有用户注销并重新登录,或者重新启动系统来使更改生效。但是,您可以立即为当前用户执行以下命令来加载新的配置:source /etc/profile
-
验证更改: 使用以下命令来验证
LD_LIBRARY_PATH
是否已正确设置:echo $LD_LIBRARY_PATH
输出应包含您添加的路径。
请注意,修改系统级配置文件可能会影响所有用户的环境设置,因此在进行更改之前,请确保您了解更改的影响。如果您只想为特定用户设置 LD_LIBRARY_PATH
,您可以编辑该用户的 ~/.bashrc
或 ~/.profile
文件,而不是 /etc/profile
。
以上就是我在更新GCC的时候遇到的问题,希望有帮到你
最后可以用 gcc --version
查看版本号来检查是否更新成功