编译安装gcc-4.8.2(编译出错后修改源码 编译成功)

记录

下载
wget ftp://ftp.gnu.org/gnu/gcc/gcc-4.8.5/gcc-4.8.5.tar.gz

解压 下载依赖

tar zxf gcc-4.8.5.tar.gz
cd gcc-4.8.5
./contrib/download_prerequisites

在gcc的同级 新建目录

cd ..
mkdir gcc-build

编译安装

cd gcc-build
../gcc-4.8.4/configure --prefix=/home/username/.local/ --enable-checking=release --enable-languages=c,c++ --disable-multilib
make -j4
make install

编译出错 接下来开始修改源码

1

cfns.gperf:101:1: error: 'const char* libc_name_p(const char*, unsigned int)' redeclared inline

参考网址
修改源码

cd ~/gcc-4.8.2/gcc/cp
vim Make-lang.in
# 然后参考网址修改 +表示新增 -表示删除
# 修改完保存退出 继续下一个文件

vim cfns.gperf
vim cfns.h
vim except.c

然后编译 出现以下错误

2

In file included from ../../../../libgcc/unwind-dw2.c:405:0:
./md-unwind-support.h: In function ‘x86_fallback_frame_state’:
./md-unwind-support.h:141:18: error: field ‘uc’ has incomplete type
  struct ucontext uc;

cd ./x86_64-unknown-linux-gnu/libgcc/
vim md-unwind-support.h
在vim命令模式输入:61可直接定位到61行
在61行和141行将struct ucontext改成struct ucontext_t即可

3

version `CXXABI_1.3.8` not found (required by /usr/lib/x86_64-linux-gnu/libicuuc.so.60)
cd ./x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/
rm -rf libstdc++.so.6
ln -snf /usr/lib/x86_64-linux-gnu/libstdc++.so.60  ./libstdc++.so.6

然后编译出现同样的错
继续修改

cd ./x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/
rm -rf libstdc++.so.6
ln -snf /usr/lib/x86_64-linux-gnu/libstdc++.so.6  ./libstdc++.so.6

这里非常奇怪 链接libstdc++.so.6有时会出错
链接libstdc++.so.60 有时也会出错
我是经过一轮修改链接莫名其妙成功了

4

../../../../gcc-4.8.2/libsanitizer/asan/asan_linux.cc: In function 'bool 
__asan::AsanInterceptsSignal(int)':
../../../../gcc-4.8.2/libsanitizer/asan/asan_linux.cc:95:20: error: 'SIGSEGV' 
was not declared in this scope
   return signum == SIGSEGV && flags()->handle_segv;

cd ../gcc-4.8.2/libsanitizer/asan
vim asan_linux.cc
添加头文件#include <signal.h>

这里顺便解决第5个错误
vim ../tsan/tsan_platform_linux.cc

__res_state *statp = (__res_state*)state;
修改为struct __res_state *statp = (struct __res_state*)state;

然后就是略微漫长的编译

make -j4

编译成功
make install

然后环境变量
vim ~/.bashrc

添加内容
export PATH="$HOME/.local/bin:$PATH"

保存退出
source ~/.bashrc

gcc --version
即可显示为对应版本

先做个记录
有空再补充

主要 !> 参考
其中涉及修改源码等操作
其他教程都会出错 需要修改源码才能编译成功
其中 链接libstdc++.so.6 这一步
在编译过程中
首次链接后编译还是出错
然后链接出错提示的文件
还是出错
这时候 再次链接libstdc++.so.6 编译成功!!!

查看usr/lib64/libstdc++.so.6

cd /usr/
这是若发现不存在lib64目录
则查看lib/x86_64-linux-gnu
要链接的文件就在此目录下

/usr/bin/ld: cannot find crt1.o: No such file or directory

若编译过程中出现/usr/bin/ld: cannot find crt1.o: No such file or directory错误
则应该是./configure时没有指定参数--disable-multilib
加入参数后重新./configure生成编译文件
编译通过

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在CentOS 7上编译安装特定版本的GCC(例如5.1.0),可以按照以下步骤进行操作: 1. 首先,确保系统已经安装了一些必要的软件包来构建GCC。运行以下命令以安装这些软件包: ``` sudo yum groupinstall -y "Development Tools" sudo yum install -y wget sudo yum install -y bzip2 ``` 2. 下载所需的GCC源代码。在此示例中,我们将使用版本5.1.0。运行以下命令: ``` wget https://ftp.gnu.org/gnu/gcc/gcc-5.1.0/gcc-5.1.0.tar.bz2 ``` 3. 解压缩下载的源代码包: ``` tar -xvf gcc-5.1.0.tar.bz2 cd gcc-5.1.0 ``` 4. 创建一个用于构建GCC的目录,并切换到该目录: ``` mkdir build cd build ``` 5. 运行以下命令来配置GCC的构建过程: ``` ../configure --prefix=/usr/local/gcc-5.1.0 --enable-languages=c,c++ ``` 请注意,上述命令将指定GCC安装到`/usr/local/gcc-5.1.0`目录中。 6. 开始构建和安装GCC。运行以下命令: ``` make -j4 sudo make install ``` 这将使用4个并行线程构建GCC,加快构建过程。根据您的系统性能,您可以调整`-j`参数的值。 7. 完成安装后,您需要通过设置环境变量来使新安装GCC生效。打开您的shell配置文件(例如`~/.bashrc`)并添加以下行: ``` export PATH=/usr/local/gcc-5.1.0/bin:$PATH export LD_LIBRARY_PATH=/usr/local/gcc-5.1.0/lib64:$LD_LIBRARY_PATH ``` 确保将路径`/usr/local/gcc-5.1.0`替换为您在第5步中指定的实际安装路径。 8. 保存并关闭您的shell配置文件,然后重新加载它: ``` source ~/.bashrc ``` 现在,您已经成功在CentOS 7上编译安装GCC 5.1.0版本。您可以使用`gcc -v`命令检查GCC版本。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值