gcc wiki翻译及学习

最近需要自己升级操作系统的gcc版本,故浏览一遍gcc的wiki,顺带翻译一遍,以供后来者享用

-------------------------------------------------------  我是愉快的分割线 ------------------------------------------

  • 为什么运行./configure和make会失败
  1. 如果在gcc源码目录进行configure和make,容易导致一些未知的问题。这一点在configuration page以及install document中都有描述
  2. 正确的做法是在gcc source code目录旁建立一个同级的gcc-build目录,然后在gcc-build目录中用绝对目录或相对路径运行configure,makefile将会在gcc-build目录中生成。

  以上步骤对于gnu标准的package来说不太常见,这是为了使gcc源码目录不受编译文件的干扰而采取的措施,使得源码包可以以后重用

  • configure或者make出现“configure:error: cannot compute suffix of object files:cannot compile”是什么原因呢?

  像绝大多数gnu projects中的工具一样,gcc使用gnu autotools来对编译进行配置,configure脚本使用某种小程序,通常是conftest.c来测试系统是否对某些函数或者特性有支持。如果该测试fail,一般会输出这样的消息:

1 checking for suffix of object files... configure: error: in `/home/manu/gcc/gcc/i686-pc-linux-gnu/libgcc':
2 configure: error: cannot compute suffix of object files: cannot compile
3 See `config.log' for more details.
4 make[2]: *** [configure-stage1-target-libgcc] Error 1
5 make[2]: Leaving directory `/home/manu/gcc/gcc'

  这样的消息通常比较具有误导性,通常需要去check出错目录下的config.log文件,在这个例子中,需要check下/home/manu/gcc/gcc/i686-pc-linux-gnu/libgcc路径下的config.log文件。error消息通常有多条,有些并不是很关键,通常做法是搜索最后的error message。

  通常引起这类消息的原因是:

  1. gcc所依赖的第三方库没有找到,具体的说是MPFR, MPC, GMP三个包。如果已安装,查看库所在的链接是否包含在链接器的搜索路径中
  2. 编译器异常,这种情况应该极少会见到
  • 编译由于类似这样的错误“fatal error: gnu/stubs-32.h: No such file or directory"而失败了,是什么原因?

  默认情况下gcc会安装对于32位和64位的支持,但是在某些GNU/LINUX分发中没有对应的32位glibc头文件的支持。解决这个问题的方案是:1.安装32位glibc的相关包libc6-devlibc6-dev-i386glibc-devel.i686等或者去掉gcc对于32位的支持:--disable-multilib

  •  当我新安装了一个版本的gcc之后,如何切换到新的gcc?

  建立一个新的脚本/etc/profile.d/gcc492.sh内容为:

  export PATH=/usr/local/gcc-4.9.2/bin/:$PATH

  其实也就是把新gcc的bin目录加入到PATH环境变量中

  • 再一个可能遇到的问题是安装某些包的时候遇到/usr/lib64/libstdc++.so.6 ‘GLIBC_3.4.15 not found’ 这样的错误,往往是因为你make install 新版本gcc的时候并不会把libstdc++库更新,所以需要手动更新一下
posted @ 2017-01-04 22:32  层序圆儿  阅读(298)  评论(0编辑  收藏  举报