异想天开

What's the true meaning of light, Could you tell me why

gcc编译安装

日期:2014-06-26 14:39:05
  
最后更新日期:2014-06-26 17:15:33
【技术文章,非码农勿入】
GNU官网选择一个镜像站点,下载gcc的tar包。应该在相同的地方,还可以下载到编译gcc需要的依赖包,我的系统为: [code lang="cpp"]
[root@localhost gcc_complie]# uname -a
Linux localhost.localdomain 2.6.32-431.1.2.0.1.el6.x86_64 #1 SMP Fri Dec 13 13:06:13 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
[/code]
gcc版本为:
[code lang="cpp"]
[root@localhost gcc_complie]# gcc -v
使用内建 specs。
目标:x86_64-redhat-linux
配置为:../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre --enable-libgcj-multifile --enable-java-maintainer-mode --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libjava-multilib --with-ppl --with-cloog --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
线程模型:posix
gcc 版本 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)
[/code]
1.目前编译gcc还需要这三个依赖包gmp-4.3.2.tar.bz2,mpc-0.8.1.tar.gz,mpfr-2.4.2.tar.bz2。具体如下:
a.先编译gmp
[code lang="cpp"]
./configure --prefix=/usr/local/gmp-4.3.2
[/code]
b.编译mpfr
[code lang="cpp"]
./configure --prefix=/usr/local/mpfr-2.4.2 --with-gmp=/usr/local/gmp-4.3.2
[/code]
c.再编译mpc
[code lang="cpp"]
./configure --prefix=/usr/local/mpc --with-gmp=/usr/local/gmp-4.3.2 --with-mpfr=/usr/local/mpfr-2.4.2
[/code]
2.编译gcc
我的编译命令为:
[code lang="cpp"]
[root@localhost gcc-4.7.4]# gcc-4.7 -v
使用内建 specs。
目标:x86_64-linux-gnu
配置为:./configure --build=x86_64-linux-gnu --prefix=/usr/gcc_4_7 --with-gmp=/usr/local/gmp-4.3.2/ --with-mpfr=/usr/local/mpfr-2.4.2/ --with-mpc=/usr/local/mpc-0.8.1/ --enable-checking=release --enable-languages=c,c++ --disable-multilib --program-suffix=-4.7
线程模型:posix
gcc 版本 4.4.7 (GCC)
[/code]
编译参数解释:
[code lang="cpp"]
program-suffix 指定bin的后缀
build 指定编译版本名
[/code]
有可能还需要将mpc和gmp以及mpfr的lib添加到LIBRARY_PATH路径下。编译需要注意的问题,也是编译gcc或其他软件出现的问题,这类问题往往给人莫名其妙的感觉。开始编译这个版本时,在GNU官网查看了测试results,证明有人用同样的系统与编译器编译过,为什么在我系统上会失败?第一次我按照这个过程编译时,编译不过,gcc报错有一些,大概类似这样:
[code lang="cpp"]
错误:与‘strsignal’类型冲突
/usr/include/string.h:566: 附注:‘strsignal’的上一个声明在此
[/code]
后来,注意到是头文件路径问题,原因在于我的头文件路径里面包含了之前我编译第三方库的头文件路径,而且我的头文件目录还包含当前目录,查看我的头文件目录为:
[code lang="cpp"]
[root@localhost gcc-4.7.4]# env | grep INCLUDE
CPLUS_INCLUDE_PATH=:/usr/local/poco/include/
C_INCLUDE_PATH=:/usr/local/poco/include/:/usr/local/pcre/include/
[/code]
造成这个问题的原因是我的/etc/profile里面,赋值是这样的:
[code lang="cpp"]
export PATH=$PATH:/usr/local/mysql/bin:/usr/local/valgrind/bin:/usr/local/srm/bin/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/:/usr/local/poco/lib/:/usr/local/pcre/lib/
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/poco/include/:/usr/local/pcre/include/
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/local/poco/include/
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/poco/lib/:/usr/local/pcre/lib/
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
[/code]
如果赋值前$C_INCLUDE_PATH开始为空,那么将包括当前目录。如果在这个目录里面的某个第三方库的头文件,有个跟gcc的头文件的冲突的头文件,而又先搜索到该头文件,那么后果就会编译不过。大概很多编译出错的问题,可以仔细检查这几个环境变量。好吧,问题解决了,多看书吧,少看些像这类型的文章,没技术含量的。