编译安装CodeViz

        转载请注明出处

        CodeViz 是《Understanding The Linux Virtual Memory Manager》的作者 Mel Gorman 写的一款分析C/C++源代码中函数调用关系的开源工具。其基本原理是给 gcc 打个补丁,使其在编译源码时将函数调用的信息输出,之后再用 perl 脚本收集整理这些信息,最后调用 Graphviz 绘制函数调用关系图。(这么看来学会 Graphviz 绘图还真是一项硬技能,毕竟代码还是读了之后才能有更深的理解,而且自动生成的东西在很多情况下往往不合要求,比如冗余信息过多,或者排版很差。)

        本文主要介绍如何(在 64 位系统上)编译打好补丁的 gcc。

        CodeViz 最新的版本是 1.0.12,在CodeViz 官网(这个应该是官网吧……)可以下到。压缩包不大,里面当然没有包含 gcc 代码包,gcc 的源代码需要另外下载。

        该版本的 CodeViz 支持 gcc-4.6.2 和 gcc-3.4.6。在本文中,鄙人编译的是 gcc-4.6.2,可以从 GNU 官网上下载,也可以从科大源下载。

        执行的基本步骤如下:

  • 将 CodeViz 解压。(假设解压到了 codeviz 目录下)
  • 将下载好的 gcc-4.6.2.tar.gz 存放到 codeviz/compilers 目录下。
  • 按照官方文档的说明,现在只要在 codeviz 目录下执行 ./configure & make & makeinstall 就可以了。但其实还有问题,容我慢慢说来。

  • 为了编译的顺利进行,根据页面Debian Bug report logs – #682678中的说明,要在 configure 之前运行下面代码(鄙人也是因为在后面的编译中遇到了麻烦的问题,在春哥帮助下,总算找到该解决方法):
  • $ LIBRARY_PATH=/usr/lib/$(gcc -print-multiarch)
    $ CPATH=/usr/include/$(gcc -print-multiarch)
    $ export LIBRARY_PATH CPATH
    
  • gcc 4.6.2 的编译安装其实是通过 codeviz/compilers 目录下的 install_gcc-4.6.2.sh 完成的。打开这个脚本,里面的结构不并复杂,也有简单的注释说明。简单来说,就是“解压 gcc,打补丁,配置编译,安装”。
  • 但是在使用之前还要对这个脚本进行一些改动(行首的加减号代表增删):

    - ../gcc-4.6.2/configure --prefix=$INSTALL_PATH --enable-shared --enable-languages=c,c++ || exit
    + ../gcc-4.6.2/configure --prefix=$INSTALL_PATH --enable-shared --disable-multilib --enable-languages=c,c++ || exit
    
    - PLATFORM=i686-pc-linux-gnu
    + PLATFORM=x86_64-unknown-linux-gnu
    
  • gcc 的编译还需要 gmp,mpc,mpfr 这 3 个库,我们可以在解压和配置之间把这 3 个库准备好。因此,分两步执行脚本,第一步只让脚本解压、打补丁,第二步则让脚本完成后续操作。两步之间则在 gcc 代码目录下(一定要注意执行的位置)执行脚本 contrib/download_prerequisites,它会把上面 3 个需要的库下载好并且建立合适的链接。
  • 好了,万事俱备,只欠编译了。为了方便排查错误,可以按照下面步骤进行。(在 codeviz 目录下执行)
  •     1. 配置 CodeViz

    $ ./configure --prefix=[path_to_install_gcc-graph]
    

        2. 执行 install_gcc-4.6.2.sh 脚本

    $ compilers/install_gcc-4.6.2.sh
    

    耐心地等上几十分钟吧,你的 gcc 正在紧张制作中。

【本文参考】在ubuntu 13.04 64位安装codeviz 1.0.12 以及 Debian Bug report logs – #682678

发表评论

电子邮件地址不会被公开。 必填项已用*标注