爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 11298|回复: 5

集群非root用户源码安装GCC-5.4.0&MPICH-3.2记录

[复制链接]

新浪微博达人勋

发表于 2018-11-6 15:20:38 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 poiuy420 于 2019-7-17 14:05 编辑

       最近在安装模式的时候发现有些模式要求到GNU版本已经高于4.4.6了,而且需求的MPI版本也相应提升到了MPICH2以上,但集群也不会为了我一个人就升级GCC及MPICH。所以,作为一个非root用户,只能在自己的目录下面源码安装GCC和MPICH了(羡慕一波中科的天河用户),折腾许久,写些心得分享给各位。
第一步. 获取GCC源码
         linux下源码安装的最好方法就是官网,网上的各种攻略也永远赶不上官网的document来的准确。
         GCC安装的官网:https://gcc.gnu.org/install/
         GCC安装的wiki:https://gcc.gnu.org/wiki/InstallingGCC
         获取GCC源码的地址:http://ftp.gnu.org/gnu/gcc/

  1. wget http://ftp.gnu.org/gnu/gcc/gcc-5.4.0/gcc-5.4.0.tar.bz2
复制代码

         另外一提,很多源码安装的帖子发的比较早,都是通过centos的网站获取的,打开链接一看最高版本就到4.8,附上网址:http://vault.centos.org/7.0.1406/os/x86_64/Packages/

第二步. 安装GCC
          安装GCC需要依赖三个库:GMP, MPFR 和 MPC,只需要在GCC目录下运行命令
  1. ./contrib/download_prerequisites
复制代码
         就可以自动下载这三个组件,这里最好是按照官方文档来进行安装,而且需要深入检查的话有官方提供的test代码。好多的教程攻略都是一顿wget获取依赖库的源码,手动进行各种配置和添加环境变量,纯粹是走冤枉路,官网告诉你其实只是一个命令的事情。
          下面进行编译配置选项,配置之前有一点很重要!安装GCC不能在它的源码目录下直接配置,需要在它的目录下新建一个文件夹,然后进入这个文件夹配置并编译安装,官网给这个文件夹命名为objdir,不知道其他名字行不行。其实不知道不能在源码目录下直接配置也没事,在你配置的过程中会报错,提醒你需要在其他位置配置
  1. mkdir objdir
  2. cd objdir
  3. ../configure --disable-checking --enable-languages=c,c++,fortran --disable-multilib --prefix=/path/to/install/gcc-5.4 --enable-threads=posix
  4. make -j && make install           
复制代码
           这里/path/to/install/gcc-5.4是你自己定义要安装GCC的目录。
            其中make -j是无限制并行make的意思,加速你编译的速度,毕竟有的教程上说能make上一天(没有考证过,不过确实很慢),如果想限制使用核心数可使用
  1. make -j8          #8核
复制代码
           在languages下需要什么语言添加什么语言即可,常见的气象模式应该用到上面这3个就可以了,官网有详细的列表,如下
--enable-languages=lang1,lang2,…

Specify that only a particular subset of compilers and their runtime libraries should be built. For a list of valid values for langN you can issue the following command in the gcc directory of your GCC source tree:

grep ^language= */config-lang.in

Currently, you can use any of the following: all, default, ada, c, c++, d, fortran, go, jit, lto, objc, obj-c++. Building the Ada compiler has special requirements, see below. If you do not pass this flag, or specify the option default, then the default languages available in the gcc sub-tree will be configured. Ada, D, Go, Jit, and Objective-C++ are not default languages. LTO is not a default language, but is built by default because --enable-lto is enabled by default. The other languages are default languages. If all is specified, then all available languages are built. An exception is jit language, which requires --enable-host-shared to be included with all.

        而--disable-multilib如果不添加我这里会报错,并且也提示你需要添加这个命令,具体详见官网。

            最后添加一下环境变量
  1. export PATH=/path/to/install/gcc-5.4/bin:$PATH
  2. export LD_LIBRARY_PATH=/path/to/install/gcc-5.4/lib/:/path/to/install/gcc-5.4/lib64:$LD_LIBRARY_PATH
复制代码

Tips:如果在configure的时候报上数十行(没数,也可能上百行)的error,向上翻到最开始的报错内容为
  1. error: Unable to find a suitable type for HOST_WIDE_INT
复制代码
          说明你所在的集群可能会有宏定义的冲突,需要重置下相关环境变量(感谢http://www.funcwj.cn/2017/05/28/gcc-update/的解释及解决方案)
  1. unset LIBRARY_PATH CPATH C_INCLUDE_PATH PKG_CONFIG_PATH CPLUS_INCLUDE_PATH INCLUDE
复制代码




第三步. 获取MPICH及安装
              MPI支持并不仅限于MPICH,而且可能现在用OpenMPI的更多一点,获取源码的途径还是建议官网https://www.mpich.org/.
              安装过程以MPICH-3.2举例
  1. tar xzvf /path/to/your/mpich_package/mpich-3.2.tar.gz
  2. cd mpich-3.2
  3. export CC=gcc
  4. export CXX=g++
  5. export F77=gfortran
  6. export FC=gfortran
  7. unset F90  # 很多集群有这个问题,在此标注
  8. unset F90FLAGS
  9. ./configure --prefix=/path/to/your/mpich --disable-shared
  10. make
  11. make check
  12. make install
  13. export PATH=/path/to/your/mpich/bin:$PATH
复制代码
             其中 /path/to/your/mpich_package是安装包的路径,/path/to/your/mpich/是MPICH安装到的目录。

             另外有一个小tips,在第二步中设定LD_LIBRARY_PATH时,如果没有/path/to/install/gcc-5.4/lib64的路径,下面安装MPICH时会报错,
  1. Unable to configure with Fortran support because configure could not determine the size of a Fortran INTEGER. Consider setting CROSS_F77_SIZEOF_INTEGER to the length in bytes of a Fortran INTEGER]
复制代码
          谷歌之基本告诉你如果不用fortran请禁用它或者CPP=cpp之类的答案,其实是缺少了这个路径会导致gfortran无法工作,写个最简单的hello world程序用个gfortran能运行出来a.out,但是运行./a.out时会报错
  1. ./a.out: error while loading shared libraries: libquadmath.so.0: cannot open shared object file: No such file or directory
复制代码
           (感谢mpich-discuss让我注意到了这个问题,它困扰了我将近2星期!)






密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-11-6 15:37:27 | 显示全部楼层
另外吐槽一下集群上的低版本git命令,在
  1. git clone https://github.com/XXXXX.git
复制代码
时会报错,只能改成
  1. git clone git://github.com/XXXXX.git
复制代码
,很多别人写好的cmake的Makefile要手动改。在自己的目录下升级git命令仍然没能解决这个问题,希望大家提点建议。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-7-16 16:32:09 | 显示全部楼层
楼主,为什么我编译的时候,必须把gfortran删掉,加上fortran才可以
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-7-17 14:05:07 | 显示全部楼层
对方的凤飞飞 发表于 2019-7-16 16:32
楼主,为什么我编译的时候,必须把gfortran删掉,加上fortran才可以

能详细点么?如果可以的话,能把编译过程也写出来么?
不是很清楚你需要把哪里的gfortran删掉,又是在哪里加上了Fortran
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-7-17 14:10:51 | 显示全部楼层
对方的凤飞飞 发表于 2019-7-16 16:32
楼主,为什么我编译的时候,必须把gfortran删掉,加上fortran才可以

又检查了一遍帖子,如果是在安装gcc的时候安装gfortran的那里,我貌似是是笔误将fortran写成了gfortran,现已修改为
  1. ../configure --disable-checking --enable-languages=c,c++,fortran --disable-multilib --prefix=/path/to/install/gcc-5.4 --enable-threads=posix
复制代码

如果在安装过程中有什么其他问题的话,可以参考文中附上的官网原文
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-7-18 13:19:45 | 显示全部楼层
谢谢楼主,按照你这样我还是有报错。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表