Linux安装编译GCC

来源:互联网 发布:华安期货软件 编辑:程序博客网 时间:2024/05/21 17:52

最近遇到在Linux下使用C++标准正则库报错,google发现是与gcc版本的问题,于是只好重新安装编译新的gcc,但是安装过程没有想象的那么简单,以下是遇到的各种坑:

注意:网上很多垃圾教程,很是误导人,就严格按照下面一步步来,不要试来试去,陷入各种奇怪错误陷阱,坑自己。


1)下载gcc源码,不多讲。

2)root权限切换到/opt目录下

cd /opt
解压gcc源码包到/opt目录下

tar xzvf gcc-4.8.2.tar.gzcd gcc-4.8.2

3)******下载依赖包gmp,mpfr,mpc

  1. 分别下载安装,很麻烦,很作死,不多讲。
  2. 执行下面的脚本自动下载关联依赖库
         ./contrib/download_prerequisites
4)****新建一个文件,用来编译
一定要不要在那个gcc文件下直接编译,否则会报错,作死妥妥的
cd ..mkdir objdir
mkdir /usr/local/gcc-4.9.1
mkdir /usr/local/gcc
5)编译gcc
cd objdir
../gcc-4.9.1/configure --prefix=/usr/local/gcc-4.9.1 --exec-prefix=/usr/local/gcc --enable-languages=c,c++
make  #很慢,大概要编译一个多小时
6)*****安装gcc
make install
以上gcc就算是安装完了,但是要正常使用,还需要一些配置,一下配置方法引用自http://ilovers.sinaapp.com/article/centos%E4%B8%8B%E5%AE%89%E8%A3%85gcc-481:
make install 之后,会发现 /user/local/gcc 下放置的是 bin + lib 文件,/usr/local/gcc-4.8.1 下放置的是 include 文件。上面完事之后,就是删除原有的 gcc,替换成现在的最新版本;不过为了保险起见,还是将原有的 gcc 换成其他名字的好,比如 gcc-4.4.7/g++-4.4.7。关于后续的工作其实还有一些,主要是环境变量的设置,以及为 c++ 做的一些设置。# 将 gcc/g++ 改名$ mv /usr/bin/gcc /usr/bin/gcc-4.4.7$ mv /usr/bin/g++ /usr/bin/g++-4.4.7# 环境变量的设置$ export PATH=/usr/local/gcc/bin:$PATH # 可以让 us 使用最新的 gcc/g++;$ export LD_LIBRARY_PATH=/usr/local/lib # 这个可能不是必须的,对于 me 来说是必须的,设置的是 lib  的搜索 path;$ ln -s /usr/local/gcc-4.8.1/include/c++/4.8.1 /usr/include/c++/4.8.1 # 在 include/c++ 文件夹下添加最新的 c++ 4.8.1 版本(这是个符号链接);$ export C_INCLUDE_PATH=/usr/include # 这个是多余的,实际上不用设置;$ export CPLUS_INCLUDE_PATH=/usr/include/c++/4.8.1:/usr/include/c++/4.8.1/x86_64-unknown-linux-gnu # c++ include 搜索目录,这里有两个,使用的 : 隔开;有个问题是,在 shell 中通过 export 设置的环境变量不是持久有效的,在用户退出登录之后就不再有效,可以将 export 的环境变量在用户主目录下的 .bash_profile 中设置,对用户来说,是持久有效的;如果想对对所有的用户有效,需要 root 在 /etc/profile 中设置;安装可能出现的问题以及方案configure 步骤提示找不到 gmp、mpfr 等 lib 或是 header;缺少的要安装,可以使用自带的包管理器,比如 yum install gmp,也可以从官网下载安装,下载地址:GMP:http://gmplib.orgMPFR:http://www.mpfr.orgMPC:http://www.multiprecison.orgISL+CLooG:ftp://gcc.gnu.org/pub/gcc/infrastructureISL 明明已经安装了,然而 configure 检测 no !设置环境变量 $ export LD_LIBRARY_PATH=/usr/local/lib (这是 isl lib 所在的目录,当然 u 的可能不一样);stubs-32.h 找不到,安装 32 位的 glibc-devel;编译 c++ 发现找不到 c++config.h;本来 c++ include 目录是 /usr/include/c++/4.8.1,c++config.h 位于其下的 x86_64-unknown-linux-gnu (这个文件夹跟平台有关)下,所以可以在 CPLUS_INCLUDE_PATH 中设置;环境变量设置只在 shell 中有效,退出之后就不再有效;修改 ~/.bash_profile 文件,在其中添加环境变量(需要退出登陆有效);测试编译一下 hello.cpp,使用了 c++11 的一些特性,比如初始化方式,类型推断以及新的 for 用法,$ g++ -std=c++11 hello.cpp :#include <iostream>#include <vector>#include <algorithm>using namespace std; int main(){        vector<int> v = {2, 4, 8, 3, 5, 6, 1, 7, 10, 9};         sort(v.begin(), v.end());         for(auto i: v)                cout << i << " ";        cout << endl;         return 0;}
以上。

0 0
原创粉丝点击