centos7编译源码编译高版本gcc,出现问题1:collect2: 错误:ld 以信号 9 [已杀死] 退出。出现问题2:xgcc: fatal error: cannot execute ‘cc

想装高版本gcc,yum install搞不定,只好源码编译,以下是编译过程,以及排查并解决问题的过程。

centos源码编译高版本gcc
{
1 下载
wget http://ftp.gnu.org/gnu/gcc/gcc-13.2.0/gcc-13.2.0.tar.gz
2 解压
tar -xf gcc-13.2.0.tar.gz
3 定位到目录
cd gcc-13.2.0
4 下载所需的支持库
./contrib/download_prerequisites
5 创建编译目录
cd ..
mkdir gcc-13.2.0-objdir
cd gcc-13.2.0-objdir
6 配置
../gcc-13.2.0/configure --prefix=/opt/gcc-13.2.0 --enable-languages=c,c++,fortran --disable-multilib
7 编译
make -j 8
报错:collect2: 错误:ld 以信号 9 [已杀死] 退出。
make[3]: *** [lto-dump] 错误 1
排查问题的过程
{
问题1:链接的时候为什么会被杀死?
再次编译
make -j 8
报错:xgcc: fatal error: cannot execute ‘cc1plus’: execvp: 没有那个文件或目录
问题2:为什么不能执行cc1plus?
问题3:cc1plus是什么?
使用find命令找到cc1plus
find / -name cc1plus
/home/bibo/Downloads/gcc-13.2.0-objdir/gcc/cc1plus
查看它的执行权限
ls -la /home/bibo/Downloads/gcc-13.2.0-objdir/gcc/cc1plus
发现没有执行权限,于是给执行权限
chmod a+x /home/bibo/Downloads/gcc-13.2.0-objdir/gcc/cc1plus
再次编译
make -j 8
依然报错,说cc1plus格式不正确,说明cc1plus文件内容有问题。
回答问题3:cc1plus是g++实际执行的更底层的编译程序。
回答问题2:cc1plus在链接的时候没有完整的生成,只是生成了一部分,然后ld就被系统干掉了。
                   再次编译的时候,make并不能识别上次的错误,直接认为cc1plus已生成,开始自测试。
       cc1plus没有完整生成,并且没有给执行权限,于是就报了不能执行cc1plus的错误。
问题4:cc1plus为什么没有完整生成?
回答问题4:因为之前链接的时候ld被系统杀死了。
现在回到了问题1。
清理编译产生的中间文件
make clean
继续编译
make -j 8
问题1重现
清理
make clean
编译
make -j 4
问题1再次重现
清理
make clean
再开一个cmd
实时监控cpu和内存
top -i
回到第一个cmd继续编译
make -j 4
发现编译的过程中内存确实太低,并且问题1重现
查看虚拟机内存,竟然只给了2G,难怪不够用。
于是关闭虚拟机,将2G内存改为8G,并且cpu由4核改为8核。
开启虚拟机重现编译
make -j 8
查看编译结果
echo $?
显示0,说明这次编译成功了。
说明遇到的第一个问题是问题的关键,越后面遇到的问题的提示跟问题的本质相关性越低。
回答问题1:内存不够用,而ld链接时占用大量内存,被系统干掉了。系统给它发了信号9。
}
8 安装
make install
9 验证安装
gcc -v
显示:线程模型:posix
gcc 版本 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
说明此时实际执行的gcc还是老版本的。
将实际执行的gcc改为新编译的13.2.0的
{
查询cc1plus在哪
[root@coco gcc-13.2.0-objdir]# find / -name cc1plus
/usr/libexec/gcc/x86_64-redhat-linux/4.8.2/cc1plus
/opt/gcc-13.2.0/libexec/gcc/x86_64-pc-linux-gnu/13.2.0/cc1plus
查询gcc在哪
[root@coco gcc-13.2.0-objdir]# find / -name gcc
/usr/bin/gcc
/usr/lib/gcc
/usr/libexec/gcc
/opt/gcc-13.2.0/libexec/gcc
/opt/gcc-13.2.0/lib/gcc
/opt/gcc-13.2.0/bin/gcc
逐个查询详细信息
[root@coco gcc-13.2.0-objdir]# ls -la /usr/bin/gcc
-rwxr-xr-x. 2 root root 768608 9月  29 2020 /usr/bin/gcc
[root@coco gcc-13.2.0-objdir]# ls -la /usr/lib/gcc
总用量 4
drwxr-xr-x.  3 root root   33 9月  29 2020 .
dr-xr-xr-x. 43 root root 4096 4月  30 01:42 ..
drwxr-xr-x.  3 root root   32 4月  29 03:49 x86_64-redhat-linux
[root@coco gcc-13.2.0-objdir]# ls -la /usr/libexec/gcc
总用量 16
drwxr-xr-x.  3 root root    33 9月  29 2020 .
drwxr-xr-x. 50 root root 12288 4月  29 03:49 ..
drwxr-xr-x.  3 root root    32 4月  29 03:49 x86_64-redhat-linux
[root@coco gcc-13.2.0-objdir]# ls -la /opt/gcc-13.2.0/libexec/gcc
总用量 0
drwxr-xr-x. 3 root root 33 4月  30 12:22 .
drwxr-xr-x. 3 root root 17 4月  30 12:22 ..
drwxr-xr-x. 3 root root 20 4月  30 12:22 x86_64-pc-linux-gnu
[root@coco gcc-13.2.0-objdir]# ls -la /opt/gcc-13.2.0/lib/gcc
总用量 0
drwxr-xr-x. 3 root root 33 4月  30 12:22 .
drwxr-xr-x. 3 root root 17 4月  30 12:22 ..
drwxr-xr-x. 3 root root 20 4月  30 12:22 x86_64-pc-linux-gnu
[root@coco gcc-13.2.0-objdir]# ls -la /opt/gcc-13.2.0/bin/gcc
-rwxr-xr-x. 3 root root 7040000 4月  30 12:22 /opt/gcc-13.2.0/bin/gcc
发现只有bin目录下的是可执行文件,其他的是目录
将原来的gcc备份
mv /usr/bin/gcc /usr/bin/gcc.4.8.5.bak
将高版本gcc复制过去
cp /opt/gcc-13.2.0/bin/gcc /usr/bin/gcc
再次验证
[root@coco gcc-13.2.0-objdir]# gcc -v
使用内建 specs。
COLLECT_GCC=gcc
目标:x86_64-pc-linux-gnu
配置为:../gcc-13.2.0/configure --prefix=/opt/gcc-13.2.0 --enable-languages=c,c++,fortran --disable-multilib
线程模型:posix
支持的 LTO 压缩算法:zlib
gcc 版本 13.2.0 (GCC)
这次成功了
验证g++
依然是4.8.5
查询g++
[root@coco gcc-13.2.0-objdir]# find / -name g++
/usr/bin/g++
/opt/gcc-13.2.0/bin/g++
备份原来的g++
mv /usr/bin/g++ /usr/bin/g++.4.8.5.bak
复制新g++到原来的位置
cp /opt/gcc-13.2.0/bin/g++ /usr/bin/g++
再次验证
[root@coco gcc-13.2.0-objdir]# g++ -v
使用内建 specs。
COLLECT_GCC=g++
目标:x86_64-pc-linux-gnu
配置为:../gcc-13.2.0/configure --prefix=/opt/gcc-13.2.0 --enable-languages=c,c++,fortran --disable-multilib
线程模型:posix
支持的 LTO 压缩算法:zlib
gcc 版本 13.2.0 (GCC) 
}
}

  • 14
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个错误通常表示在编译过程中出现了链接错误,导致链接器无法生成可执行文件。错误消息"collect2: error: ld returned 1 exit status"指出链接器(ld)返回了一个非零的退出状态码(1),表示链接失败。根据引用和引用的描述,这个错误可能与未正确安装依赖库相关。 在Linux编译出现这个错误的一个常见原因是缺少必要的库文件。根据引用的描述,可能是缺少libgl1-mesa-dev库。你可以尝试在终端中使用以下命令安装该库: ``` sudo apt install libgl1-mesa-dev ``` 另外,引用提到,编译时还可能缺少其他依赖库,如libbsd-devel和libbsd。如果你使用的是CentOS 7 64位系统,你可以尝试使用以下命令安装这些库: ``` sudo yum install libbsd-devel libbsd ``` 安装完所需的库后,重新编译你的代码,看看是否仍然出现相同的错误。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Qt报错 collect2.exe:-1: error: error: ld returned 1 exit status解决方案](https://blog.csdn.net/m0_65635427/article/details/130822018)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [qt error: collect2: error: ld returned 1 exit status](https://blog.csdn.net/qq_42608626/article/details/106250195)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [libbsd-devel](https://download.csdn.net/download/sun_li3/10825288)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值