Android with root Git for version control Lircd with Raspberry Pi for IR receiver and sender Tips for Windows Depolying your own password management tool -- KeeWeb Depoly your flask app into Heroku Fix shit IE code manually ISBN to Book Category by Scraping DangDang A Generic Makefile for C/C++ Program Configure Raspberry pi Remove watermark with PyPDF2 tips for docker Anaconda+TensorFlow+CUDA Snippets Configure Remote Mathematica Kernel Build your own ngrok server Access Array SSL VPN 使用Rstudio制作html5幻灯片 tips for Mac OS X system Tips for ipython notebook 配置Ubuntu server + Openbox (Obuntu) tips for Vimperator tips for Vim 安装CUDA My First Jekyll Blog rsync常见选项 在Linux中读取Ipod touch的文件 tip for texmacs 在VPS上建站的一些tip Gnuplot绘图札记 Samba系统和autofs自动挂载 Linux中alsamixer声卡无法录音 搭建自己的RSS订阅器——Tiny Tiny RSS Grub2引导安装Ubuntu awk tips 将Ubuntu系统装入U盘 The Great Rtorrent 编译GCC 再这样剁手!!!该死的libgd 使用ulimit进行资源限制 使用SSH代理上IPV6 使用RCurl抓取网页数据 修复Ubuntu Grub记 openbox中的文件关联 在Ubuntu 12.04下编译qtiplot 处理BCM4312网卡驱动纪实 配置我的Ubuntu Server记 Cygwin杂记 Linux 使普通用户具有以超级权限执行脚本 让firefox自定义地处理文件类型 WordPress优秀主题及插件 在phpcloud上搭建wordpress UBUNTU下用pptpd做VPN server ubuntu升级内核过后的一些问题 安装telnet服务 kubuntu札记 64位kubuntu札记 统计软件R Virtualbox stardict星际译王 Ubuntu重装windows系统后的grub引导修复 SSH服务及花生壳域名解析 采用cbp2make工具由code::blocks工程创建makefile文件 UBUNTU 札记

编译GCC

2013年12月14日

折腾病又犯了,这次我要从源代码编译GCC.在这里小记一下.

  1. GCC会依赖mpc,mpfr和gmp这三个包,所以先从源代码编译好吧.有人说可以直接把这三个包的源代码解压到GCC源代码下(去掉版本号啥的,就mpc这种文件夹名),GCC会自动编译它们,我没有实验.一个更简单的方法是执行gcc目录下的脚本./contrib/download_prerequisites自动下载需要的包。 configure的时候可能需要指定其他包的位置,如

    ./configure –with-gmp=/usr/local/gmp-x.x.x/ # for mpfr ./configure –with-gmp=/usr/local/gmp-x.x.x –with-mpfr=/usr/local/mpfr-x.x.x # for mpc

p.s. 最新版的mpfr好像改变了源代码的位置,放到了mpfr-x.x.x的子目录src下,包含的时候注意。另外编译mpc的时候需要指定LIBRARY的位置,用以下命令导出环境变量:

    export C_INCLUDE_PATH=/path/to/mpfr-x.x.x/src:$C_INCLUDE_PATH
    export LD_LIBRARY_PATH=/path/to/mpfr-x.x.x/src/.libs
    export LIBRARY_PATH=$LD_LIBRARY_PATH
    

p.s. 如果提示`LIBRARY_PATH shouldn't contain the current directory`,那可能是因为LIBRARY_PATH中有两个连续的`:`,删除多余的`:`就行。

p.s. 如果提示`fatal error: gnu/stubs-32.h: No such file or directory`,那可能是因为系统没有安装32位库的头文件,可以安装`libc6-dev-i386(Ubuntu)/glibc-devel.i686(RedHat)`或configure时`--disable-multilib.`禁用32位功能。
  1. 注意GCC的Makefile不支持uninstall,所以,最好把GCC的prefix设置到一个单独的文件夹,那删起来的时候也比较方便.然后

    ./configure –prefix=/path/to/gcc –with-gmp=/usr/local/gmp-x.x.x –with-mpfr=/usr/local/mpfr-x.x.x make make install

p.s.编译过程中出现错误`gcc-v4.6.1/gcc/system.h:462:20: error: conflicting types for ‘strsignal’`时([邮件列表][1]),需要清空这两个环境变量:

    export CPLUS_INCLUDE_PATH=
    export C_INCLUDE_PATH=
    

p.s.出现错误找不到`mpfr.h`或`mpc.h`时,设置环境变量包含这两个文件位置

    export CPLUS_INCLUDE_PATH=/path/to/mpfr-x.x.x/src:/path/to/mpc-x.x.x/src
    export C_INCLUDE_PATH=/path/to/mpfr-x.x.x/src:/path/to/mpc-x.x.x/src
    

出现错误时一般都是由于`LIBRARY_PATH CPATH C_INCLUDE_PATH PKG_CONFIG_PATH CPLUS_INCLUDE_PATH INCLUDE`这几个环境变量引起的。
  1. 编译完成后安装记得修改PATH变量和LIB位置

    export PATH=/path/to/gcc/bin/:$PATH export LD_LIBRARY_PATH=/path/to/gcc/lib:$LD_LIBRARY_PATH