依赖安装
安装gcc之前一定要先把一些依赖安装好,这里需要先安装gmp
,mpfr
,mpc
三个依赖,如果是离线安装的话,需要在可以联网的地方先下载好(下载地址),编译安装过程可以参考这里(注意:这三个依赖之间也存在依赖关系,安装顺序不能错)。
新版本的gcc需要用到isl
工具,否则编译项目时可能会报出找不到libisl.so.15
错误。离线安装的话,下载地址,可参考这里安装。
安装gcc
根据自己需要安装的版本下载gcc,具体下载安装过程可参考这里,需要注意的是,在配置的时候根据自己的需要配置,比如,自己的项目要用到gfortran
,因此在配置的时候需要加上--enable-languages=c,c++,fortran
,否则,自行安装gfortran
时一定要和安装的gcc版本对应,不然的话,可以会在编译项目时报出找不到-lgfortran
的错误(当然,其它的可能原因)。
其它编译错误
离线安装OpenBLAS时,报出不能识别某些命令,比如-mavx
,根据原作者给出的方案,使用make TARGET=NEHALEM
代替make
编译,问题解决。
但是,又出现了新的错误,如下
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o: In function `_start': (.text+0x20): undefined reference to `main' collect2: error: ld returned 1 exit status
Baidu, google了很久,解决方案各式各样,但在我这里都没能解决问题,然而make clean
一下重新编译,问题解决。
make
编译自己的项目时,报出了下面的错误
/tmp/ccLPRQpl.s:1147: Error: suffix or operands invalid for `vpand'
根据这里的提示,应该是项目的Makefile
文件中编译附加的一些优化指令选项的问题,我的Makefile
中有-march=native
选项,这样设置可能意味着让gcc自动检测设置合适的标记,可能会由于其他一些原因导致设置了不正确的标记或与我们项目的需求不匹配的标记,手动设置为与自己系统匹配的标记,问题解决。下面列举几个例子(参考):
CentOS release 6.5 (Final) - -march=corei7-avx
CentOS Linux 7 (Core) - -march=core-avx-i
Debian GNU/Linux 7 (wheezy) - -march=core-avx2