精英盒子 -> 程序设计 -> Ubuntu编译GCC4.7 -体验C++11 [打印本页]

jybox 2012-06-07 20:55

Ubuntu编译GCC4.7 -体验C++11

如题 ,我的ubuntu是11.10,(软件仓库里面最新的)GCC版本是4.6

但是目前GCC的最新版本是4.7,它支持更多的C++特征.我希望用它来体验C++11的特征.
关于GCC各版本对C++11的支持情况可以看这里:http://gcc.gnu.org/projects/cxx0x.html

但是ubuntu官方软件仓库只为最新的12.04LTS提供了4.7版本的GCC.

于是只好——自己编译GCC4.7


首先去GCC官网下载源码包:http://gcc.gnu.org/mirrors.html
建议选日本节点,速度理想一点.

源码包有100MB,在下载的这段时间,我们还需要干点别的

首先在软件中心安装几个被GCC依赖的软件包:

sudo apt-get update
sudo apt-get upgrade

sudo apt-get install g++ gawk m4  gcc-multilib

还需要编译安装三个软件仓库里面没有软件包:
http://www.multiprecision.org/index.php?prog=mpc&page=download
http://www.mpfr.org/mpfr-current/#download
http://gmplib.org/

没什么好说的,都是先configure,再make,最后sudo make install
但要注意,这里面MPC依赖MPFR,MPFR依赖GMP,注意编译的顺序




等GCC下载完了
同样先configure,再make,最后sudo make install

但是在这个过程中可能会出一些问题,比如缺少某个文件云云的,你可以在这个文章找到解决方案:
http://blog.csdn.net/gengshenghong/article/details/7498085

安装结束后,你需要找到新版本GCC的路径,如果你不知道,可以运行whereis gcc
找到所有的GCC,然后挨个运行gcc -v,查看版本

目测C++11还不是GCC的默认标准,要启用C++11需要在编译时加速-std=c++11这个参数..


例如,我实用Qt Creator作为IDE,那么我的.pro工程文件需要这么写:
TARGET = C++11            #工程名
CONFIG   += console        #控制台程序
CONFIG   -= app_bundle      
QMAKE_CXX = /usr/local/bin/gcc         #编译器
QMAKE_CXXFLAGS+= -std=c++11       #为编译器传递额外参数
TEMPLATE = app      #实用程序模板
SOURCES += main.cpp



给大家贴两端代码,分别是C++11的两个新特征:
#include <iostream>

long double operator"" cm(long double x) { return x / 100; }
long double operator"" m(long double x)  { return x; }
long double operator"" km(long double x) { return x * 1000; }


int main()
{
    std::cout << 1.2km+200.0m+20.0m+30.0cm << std::endl;
}

这个输出是1420.3,这个特征是“常量后缀重载”

#include <iostream>
#include <cmath>

int main()
{
    std::cout <<
    [](float f)->int
    {
        return std::abs(f);
    }
    (-3.5)
    <<std::endl;
}

这个输出是3,这个就是很有名的lambda表达式了




whtsky 2012-06-07 21:03
http://clang.llvm.org/cxx_status.html

看起来clang的支持稍微好一点?

jybox 2012-06-07 21:30
whtsky:http://clang.llvm.org/cxx_status.html
看起来clang的支持稍微好一点? (2012-06-07 21:03) 

看起来好像是的,有空耍耍......




Powered by phpwind v8.7 Code ©2003-2011 phpwind
Time 0.039402 second(s),query:5 Gzip enabled