编译安装GCC 5.2.0
2024-10-15 21:37:29
https://blog.atime.me/note/install-gcc-5.2.0-from-source.html
记录编译GCC 5.2.0时遇到的问题和解决方法,以备日后查询。
平时使用的服务器是CentOS5,自带的gcc编译器还是8年前发布的4.1.2版本,完全没法写C++11的代码,因为不想升级操作系统,只好自己下载源码编译。
安装过程挺dan疼的,只好记录下来。
安装依赖库
GCC依赖于gmp 4.2+, mpfr 2.4+和mpc 0.8+,这里直接下载安装最新的版本。
为了省事,所有的库都直接装到/usr/local目录下的对应目录。(不要在生产环境上这么干)
安装gmp 6.0
wget https://gmplib.org/download/gmp/gmp-6.0.0a.tar.bz2
tar xvf gmp-6.0.0a.tar.bz2
cd gmp-6.0.0
./configure
make -j4
make check
make install
安装mpfr 3.1.3
mpfr依赖于gmp。
wget http://www.mpfr.org/mpfr-current/mpfr-3.1.3.tar.bz2
tar xvf mpfr-3.1.3.tar.bz2
cd mpfr-3.1.3
./configure --with-gmp-include=/usr/local/include \
--with-gmp-lib=/usr/local/lib
make -j4
make check
make install
安装mpc 1.0.3
mpc依赖于gmp和mpfr。
wget ftp://ftp.gnu.org/gnu/mpc/mpc-1.0.3.tar.gz
tar xvf mpc-1.0.3.tar.gz
cd mpc-1.0.3
./configure --with-mpfr-include=/usr/local/include \
--with-mpfr-lib=/usr/local/lib \
--with-gmp-include=/usr/local/include \
--with-gmp-lib=/usr/local/lib
make -j4
make check
make install
安装GCC
编译
建议先阅读下官方的安装文档。
下载GCC并解压。
wget ftp://ftp.gnu.org/gnu/gcc/gcc-5.2.0/gcc-5.2.0.tar.bz2
tar xvf gcc-5.2.0.tar.bz2
cd gcc-5.2.0
先unset若干个系统变量,以免出现某些宏找不到的情况。
unset CPLUS_INCLUDE_PATH LIBRARY_PATH
配置GCC
./configure \
--with-gmp-include=/usr/local/include \
--with-gmp-lib=/usr/local/lib \
--with-mpfr-include=/usr/local/include \
--with-mpfr-lib=/usr/local/lib \
--with-mpc-include=/usr/local/include \
--with-mpc-lib=/usr/local/lib \
--enable-languages=c,c++ \
--enable-threads=posix \
--disable-multilib
详细的配置项说明可参考安装文档,这里只编译c和c++的编译器。
然后make -j8
,启用多线程编译。
测试
先安装dejagnu: yum install dejagnu
。
然后运行如下命令:
make -j8 check-gcc
查看测试结果:
./contrib/test_summary
安装
如果编译顺利通过,make install
即可。
gcc和g++默认被安装到/usr/local/bin
目录下,libgcc和libstdc++默认被安装到/usr/local/lib64
(x64)。
记得更下下动态库缓存。
ldconfig
可能遇到的问题
XXXX not defined
遇到某个宏没有定义的情况,先unset C_INCLUDE_PATH
再尝试。
braced spec is invalid
很dan疼的一个问题,搜遍了全网也没见有比较正式的解决方案。目前看上去比较靠谱的方法可参考这里,具体操作就是手动改一下某个specs文件。
我这里是host-x86_64-unknown-linux-gnu/gcc/specs
,把其中所有的%:sanitize(xxx)
改为fsanitize=xxx
。
测试C++11
写一个脑残的cpp测试下新安装的编译器。
#include <atomic>
#include <regex>
#include <iostream>
using namespace std; int main() {
atomic<long long> num(1L << 14);
cout << ++num << endl; regex r("[0-9]+");
string s("0abc11abc222cba");
sregex_iterator ib(s.begin(), s.end(), r);
sregex_iterator ie;
cout << "search numbers in: " << s << endl;
for (sregex_iterator i = ib; i != ie; ++i) {
cout << "match: " << i->str() << endl;
}
}
编译并运行:
/usr/local/bin/g++ -std=c++11 b.cpp -o b
LD_LIBRARY_PATH=/usr/local/lib64 ./b
最新文章
- Java中JDBC连接数据库代码和步骤详解总结
- XML.03-DOM和SAX解析
- jQueryMobile控件之页面切换
- spring扫描classpath下特定package,并加载具有特定注解的接口
- 高德地图API应用
- 转-Android 之 使用File类在SD卡中读取数据文件
- 让用户打开你app的位置功能
- java把InputStram 转换为String
- codevs1002搭桥(建图+Prim)
- NPAPI火狐插件VS2013开发示例
- 关于jQuery中的$.grep()方法的使用
- [原创] linux deepin 2014.1下编译putty
- ASP.NET 5 Overview
- C#npoi导出excel一些自己的看法
- antlr v4 使用指南连载3——g4文件概览
- Python(Django)项目与Apache的管理
- expect脚本实现ssh自动登录
- python学习笔记_week4
- 测试SD卡读写速度
- python 实现二叉树的深度 &; 广度优先遍历
热门文章
- Windows下面对环境变量的操作
- C# 仿迅雷风格选项卡
- build tree
- 学习Swift -- 协议(上)
- GO语言中的指针
- C连接MySQL数据库开发之Xcode环境配置及测试
- 【Tools】Apache Maven 入门篇 ( 上 )
- highestAvailable比较灵活,毕竟大多数功能不需要系统最高权限(四种方法:屏蔽UAC,右键以管理员身份运行,增加manisfest,制作数字证书)
- Andoid 学习笔记 AppCompatEditText
- BZOJ1617: [Usaco2008 Mar]River Crossing渡河问题