背景:
最近在捣鼓IOS覆盖率的时候,由于需要在Linux下实现将.gcno文件和.gcda文件合并生成覆盖率文件,但是直接使用lcov生成的时候,报错了,错误如下:
经查询是xcode编译的时候,使用的是gcov4.2.1的,但是Linux服务器上的gcc、gcov是4.4版本的,由于版本不匹配造成的报错,于是需要将Linux服务器上的gcc版本降低到4.2.1(备注:gcov是随gcc一起安装的)。
可以看到本机安装的gcc和gcov是4.4.7版本的。
安装过程:
1、下载GCC
从镜像下载对应版本的gcc压缩包 http://mirror.hust.edu.cn/gnu/gcc/,下载完成后,解压:
tar -zxvf gcc-4.2.1.tar.gz
2、新建一个编译后输出的目录
通常建议新建一个目录用于存放编译后输出的文件,本人一开始是直接在源码下直接编译的,出了一些问题,因此强烈建议重新建一个目录。
mkdir gcc-build-4.2.1
3、生成makefile文件
在源码解压后的目录中,有个configure可执行文件。进入输出目录,并执行命令,生成Makefile文件。
cd gcc-build-4.2.1
../gcc-4.2.1/configure --prefix=/usr/bin/gcc-4.2.1 --enable-language=c,c++,java,objc --disable-multilib
(其中/usr/bin/gcc-4.2.1是GCC要安装的目录,--enable-language=c,c++,java,objc是设置安装可编译的语言,multilib一定要禁用,否则可能出现一些其他问题)
执行以上命令后,可以看到在gcc-build-4.2.1目录下会有个Makefile文件。
4、编译
在该目录(gcc-build-4.2.1)下执行编译。
make
该过程会比较慢,耐心等待~~。也可能会遇到一些问题,大部分都是因此缺少依赖库造成的,每个人可能遇到的都不同,遇到问题直接百度就行。
由于自己一开始是在源码下直接编译的,因此过程中遇到了一些问题,以下是本人在源码下直接make的时候遇到的问题,在此记录下来,仅供参考。(因此强烈建议自己新建一个编译后的文件,以免发生一些不必要的问题)。
问题(1):
java/parse-scan.c:没有那个文件或目录。
原因:缺少bison,因此需要安装bison。附bison下载地址:http://ftp.gnu.org/gnu/bison/
过程如下:
tar -xvf bison-3.0.tar.gz
cd bison-3.0
./configure
make && make install
安装完后,检查下是否安装成功。
表明已经成功安装。
问题(2):
解决完上述问题之后,继续进行make ,但是又遇到了如下问题。
查了半天没有啥叫进展,看到有文章说最好不要在源码下直接编译,于是新建一个gcc-build文件在这里进行编译。
问题(3):
进入上述新建的目录进行make,依然遇到了问题。如下:
经查询该问题是由于,一开始在源码下编译,然后又换到其他目录进行编译造成的。
于是按照他说的,删除之前下载gcc压缩包解压后的文件,重新解压,并且删除了/usr/bin/gcc-4.2.1文件,并进入gcc-build-4.2.1中重新从头进行安装编译。
然后从头进行重新make,然后就再也没有遇到其他问题了,不过这个编译的过程持续了大概1个小时左右,比较漫长,耐心等待。
5、安装
make install
依然顺利,没出问题。
6、建立新版本的链接
由于系统中原来安装的是gcc 4.4.7版本,因此安装了4.2.1之后,需要删除原来的链接,重新建立新链接,操作如下:
rm /usr/bin/gcc
ln -s /usr/bin/gcc-4.2.1/bin/gcc /usr/bin/gcc
7、检查新版本
gcc -v
至此特定版本的gcc已经安装成功了。
但是此时gcov版本依然还是4.4.7版本的,同样的操作即可:
(1)删除原有的/usr/bin/gcov
(2)将/usr/bin/gcc-4.2.1/bin/gcov 复制到/usr/bin/下即可。
查看gcov版本:变成了期望的4.2.1。
后续:
由于我安装gcc和gcov是为了解决IOS代码覆盖率生成问题,因此,安装完之后重新尝试生成覆盖率文件。这次终于不报404,402R那个错误了。