Open jinhailang opened 7 years ago
最近遇到在Linux下使用C++标准正则库报错,google发现是与gcc版本的问题,于是只好重新安装编译新的gcc,但是安装过程没有想象的那么简单,以下是遇到的各种坑: 注意:网上很多垃圾教程,很是误导人,就严格按照下面一步步来,不要试来试去,陷入各种奇怪错误陷阱,坑自己。
1)下载gcc源码,不多讲。
2)root权限切换到/opt目录下
cd /opt
解压gcc源码包到/opt目录下
tar xzvf gcc-4.8.2.tar.gz cd gcc-4.8.2
3)下载依赖包 gmp, mpfr, mpc
分别下载安装,很麻烦,很作死,不多讲。 执行下面的脚本自动下载关联依赖库
./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.org MPFR:http://www.mpfr.org MPC:http://www.multiprecison.org ISL+CLooG:ftp://gcc.gnu.org/pub/gcc/infrastructure ISL 明明已经安装了,然而 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; }
以上。
最近遇到在Linux下使用C++标准正则库报错,google发现是与gcc版本的问题,于是只好重新安装编译新的gcc,但是安装过程没有想象的那么简单,以下是遇到的各种坑: 注意:网上很多垃圾教程,很是误导人,就严格按照下面一步步来,不要试来试去,陷入各种奇怪错误陷阱,坑自己。
1)下载gcc源码,不多讲。
2)root权限切换到/opt目录下
cd /opt
解压gcc源码包到/opt目录下
3)下载依赖包 gmp, mpfr, mpc
分别下载安装,很麻烦,很作死,不多讲。 执行下面的脚本自动下载关联依赖库
./contrib/download_prerequisites
4)新建一个文件,用来编译
一定要不要在那个gcc文件下直接编译,否则会报错,作死妥妥的
5)编译gcc
6)安装gcc
以上gcc就算是安装完了,但是要正常使用,还需要一些配置,一下配置方法引用自 http://ilovers.sinaapp.com/article/centos%E4%B8%8B%E5%AE%89%E8%A3%85gcc-481:
以上。