流场可视化工程dlb-dynamicdr部署日志:阶段三:服务器集群部署

前期工作

已经在本地端进行库的安装部署 流场可视化工程dlb-dynamicdr部署日志:阶段一: 库安装部署

已经在本地成功编译工程 流场可视化工程dlb-dynamicdr部署日志:阶段二:工程本地编译

经过前期工作准备,工程已经可以成功编译,但由于是大型并行粒子追踪程序,运行需要在集群超算上。本地没有大量存储空间容纳巨量的数据。故这个阶段我们在实验室的服务器集群上进行安装测试。

本阶段将一并对库进行安装调试以及工程编译。

库部署阶段

首先说明,实验室账号是新建的空账号,所以各种库基本都没有,这倒是一个比较好的条件,不会被环境扰乱。

首先用echo命令对环境变量进行检查如下:

$ echo  $PATH
/home/tianrui.cui/include:/usr/kerberos/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/bin:/usr/bin:/opt/bin:/home/tianrui.cui/bin 
$ echo  $LD_LIBRARY_PATH
/usr/local/lib: 

2022-02-26

阶段一(总)

CMake重新部署(阶段一)

首先对CMake进行安装。

最开始的想法是直接指定目录,在PATH和LD_LIBRARY_PATH中添加变量。但会有报错如下。

cmake: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory

考虑是否是因为在新环境下需要重新安装,而不能仅仅是拷贝过来应用。于是进行重新安装。(我之前在Ubuntu20.04LTS下进行的安装,现在的服务器应该是CentOS系统)

重新安装在configure环节遇到报错如下:

[tianrui.cui@array build]$ ../configure --prefix=/home/tianrui.cui/dlb-lib/CMake/installed_lab_server/                  
---------------------------------------------                                                                           
CMake 3.22.2, Copyright 2000-2021 Kitware, Inc. and Contributors                                                        Found GNU toolchain                                                                                                     
C compiler on this system is: gcc                                                                                       
---------------------------------------------                                                                           
Error when bootstrapping CMake:                                                                                         Cannot find a C++ compiler that supports both C++11 and the specified C++ flags.                                        Please specify one using environment variable CXX.                                                                      The C++ flags are "".                                                                                                   
They can be changed using the environment variable CXXFLAGS.                                                            See cmake_bootstrap.log for compilers attempted.                                                                        ---------------------------------------------                                                                           
Log of errors: home/tianrui.cui/dlblib/CMake/cmake3.22.2/build/Bootstrap.cmk/cmake_bootstrap.log                     
---------------------------------------------   

进行搜索后发现可能是因为gcc/g++版本太低了。

对工程部署说明进行查验后发现gcc/g++要求的版本是4.8.5及以上,而当前的版本为:4.1.2

$ gcc --version                                                                                
gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-54)                                                                             Copyright (C) 2006 Free Software Foundation, Inc.                                                                       This is free software; see the source for copying conditions.  There is NO                                              warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

故下一个阶段应该是对GCC进行重新安装,或指定我目录下的GCC版本号,而非进行全局的重新安装。(可以有两个版本的GNU,我指定使用我安装的版本即可)

2022-02-27

GCC重新部署(阶段一)

首先安装新版本的GCC

GCC版本:11.2.0

由于之前在本地使用默认版本的gcc,故在此重新进行一遍安装总结:

$ cd GCC/
$ mkdir installed
$ tar -zxvf gcc-11.2.0.tar.gz  
$ cd gcc-11.2.0 
$ mkdir build
$ cd build/
$ ../configure --prefix=/home/tianrui.cui/dlb-lib/GCC/installed 

报错信息如下:

configure: error: Building GCC requires GMP 4.2+, MPFR 3.1.0+ and MPC 0.8.0+.                                           
Try the --with-gmp, --with-mpfr and/or --with-mpc options to specify                                                    their locations.  
Source code for these libraries can be found at                                                   their respective hosting sites as well as at https://gcc.gnu.org/pub/gcc/infrastructure/.  
See also http://gcc.gnu.org/install/prerequisites.html for additional info.  
If you obtained GMP, MPFR and/or MPC from a vendor distribution package, make sure that you have installed both the libraries and the header files.  
They may be located in separate packages.

说明GCC编译依赖GMP、MPFR、MPC。接下来去安装这几个库:
参考链接:GCC安装依赖库参考链接

GMP安装

GMP版本:6.2.1

$ cd /home/tianrui.cui/dlb-lib/GCC/Dependent/GMP 
$ mkdir installed
$ xz -d gmp-6.2.1.tar.xz
$ tar -xvf gmp-6.2.1.tar
$ cd gmp-6.2.1.tar
$ mkdir build
$ cd build
$ ../configure --prefix=/home/tianrui.cui/dlb-lib/GCC/Dependent/GMP/installed 
# 等待几秒钟
$ make 
# 等待几分钟
$ make install
#等待几秒钟

configure 阶段最终输出信息如下

config.status: executing libtool commands
configure: summary of build options:
Version:           GNU MP 6.2.1
Host type:         sandybridgenoavx-pc-linux-gnu
ABI:               64
Install prefix:    /home/tianrui.cui/dlb-lib/GCC/Dependent/GMP/installed
Compiler:          gcc -std=gnu99 
Static libraries:  yes
Shared libraries:  yes  

添加环境变量,这里我们在服务器上进行部署,仅对个人用户生效即可,即修改.bashrc即可,加入如下几行:

export GMP_ROOT=$CTR_CPP_LIB_ROOT/GCC/Dependent/GMP/installed
# export PATH=$PATH:$GMP_ROOT/bin 
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:$GMP_ROOT/include
export C_INCLUDE_PATH=$C_INCLUDE_PATH:$GMP_ROOT/include
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$GMP_ROOT/lib 
MPFR安装

MPFR版本:4.1.0

$ cd /home/tianrui.cui/dlb-lib/GCC/Dependent/MPFR 
$ mkdir installed
$ tar -zxvf mpfr-4.1.0.tar.gz 
$ cd mpfr-4.1.0
$ mkdir build
$ cd build
$ ../configure --prefix=/home/tianrui.cui/dlb-lib/GCC/Dependent/MPFR/installed 
# 等待几秒钟

configure阶段报错发现无法找到gmp.h,但考虑到已经在CPLUS_INCLUDE_PATH中添加了头文件路径,故考虑是否其只对C_INCLUDE_PATH进行搜索,故继续为.bashrc中添加C_INCLUDE_PATH部分。之后问题解决继续configure。

继续更新configure阶段报错如下:

......
checking for gmp.h... yes
checking for recent GMP... yes
checking usable gmp.h at link time... yes
checking for GMP_NUMB_BITS and sizeof(mp_limb_t) consistency... yes
checking for __gmpz_init in -lgmp... no
configure: error: libgmp not found or uses a different ABI (including static vs shared).
Please read the INSTALL file -- see "In case of problem".  

但是我添加了LD_LIBRARY_PATH啊,echo查看结果如下:

echo $LD_LIBRARY_PATH
/usr/local/lib:/home/tianrui.cui/dlb-lib/GCC/Dependent/GMP/installed/lib

于是考虑是否编译中只对静态链接库路径进行搜索,尝试为其添加LIBRARY_PATH,如下:

export LIBRARY_PATH=/usr/local/lib
export LIBRARY_PATH=$LIBRARY_PATH:$GMP_ROOT/lib 

使用source命令让环境变量生效,继续configure。

果然,以上的修改奏效,configure阶段通过。

$ make 
# 等待几分钟
$ make install
#等待几秒钟

成功。

更新.bashrc文件,加入如下:

# MPFR

export MPFR_ROOT=$CTR_CPP_LIB_ROOT/GCC/Dependent/MPFR/installed
# export PATH=$PATH:$MPFR_ROOT/bin 
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:$MPFR_ROOT/include
export C_INCLUDE_PATH=$C_INCLUDE_PATH:$MPFR_ROOT/include
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MPFR_ROOT/lib 
export LIBRARY_PATH=$LIBRARY_PATH:$MPFR_ROOT/lib 

并使用source命令使其生效。

MPC安装

MPC版本:1.2.1

$ cd /home/tianrui.cui/dlb-lib/GCC/Dependent/MPC
$ mkdir installed
$ tar -zxvf mpc-1.2.1.tar.gz  
$ cd mpc-1.2.1
$ mkdir build
$ cd build
$ ../configure --prefix=/home/tianrui.cui/dlb-lib/GCC/Dependent/MPC/installed 
# 等待几秒钟
$ make 
# 等待一分钟
$ make install
#等待几秒钟

成功的比较顺利。

添加环境变量如下,为.bashrc添加:

# MPC

export MPC_ROOT=$CTR_CPP_LIB_ROOT/GCC/Dependent/MPC/installed
# export PATH=$PATH:$MPC_ROOT/bin 
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:$MPC_ROOT/include
export C_INCLUDE_PATH=$C_INCLUDE_PATH:$MPC_ROOT/include
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MPC_ROOT/lib 
export LIBRARY_PATH=$LIBRARY_PATH:$MPC_ROOT/lib 

GCC重新部署(阶段二)

安装完之前代表依赖库后,继续GCC的configure阶段:

$ cd /home/tianrui.cui/dlb-lib/GCC/gcc-11.2.0/build
$ ../configure --prefix=/home/tianrui.cui/dlb-lib/GCC/installed 

输出报错信息如下:

checking for the correct version of gmp.h... yes
checking for the correct version of mpfr.h... yes
checking for the correct version of mpc.h... yes
checking for the correct version of the gmp/mpfr/mpc libraries... yes
checking for isl 0.15 or later... no
required isl version is 0.15 or later
The following languages will be built: c,c++,fortran,lto,objc
*** This configuration is not supported in the following subdirectories:
gnattools gotools target-libada target-libhsail-rt target-libphobos target-zlib target-libgo target-libffi target-liboffloadmic (Any other directories should still work fine.)
checking for default BUILD_CONFIG... bootstrap-debug
checking for --enable-vtable-verify... no
/usr/bin/ld: crt1.o: No such file: No such file or directory
collect2: ld returned 1 exit status
configure: error: I suspect your system does not have 32-bit development libraries (libc and headers). If you have them, rerun configure with --enable-multilib. If you do not have them, and want to build a 64-bit-only compiler, rerun configure with --disable-multilib.  

前面几行说明之前配置的依赖库GPM、MPFR、MPF都成功找到了,目前的问题是监测到系统没有32位指令集/开发库,如果不对该部分进行安装则需要使用 --disable-multilib命令符。

我们不需要32位库,于是输入如下:

$ ../configure --prefix=/home/tianrui.cui/dlb-lib/GCC/installed --disable-multilib

成功。

继续make以及make install

$ make 
# 等待几分钟

make阶段报错如下:

......
checking for sys/types.h... no
checking for sys/stat.h... no
checking for stdlib.h... no
checking for string.h... no
checking for memory.h... no
checking for strings.h... no
checking for inttypes.h... no
checking for stdint.h... no
checking for unistd.h... no
......
checking for uint8_t... no
checking for uint16_t... no
checking for uint32_t... no
checking for uint64_t... no
checking for uintmax_t... no
checking for uintptr_t... no
configure: error: uint64_t or int64_t not found
make[2]: *** [configure-stage1-gcc] Error 1
......

主要问题就是有很多基础库找不到。查看我们的基本头文件路径,发现路径为/usr/include,而我们的C_INCLUDE_PATH以及CPLUS_INCLUDE_PATH仅包含了/usr/local/include。故更新为如下:

export PATH=/usr/kerberos/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/bin:/usr/bin:/opt/bin
export LD_LIBRARY_PATH=/usr/local/lib:/usr/lib
export LIBRARY_PATH=/usr/local/lib:/usr/lib
export CPLUS_INCLUDE_PATH=/usr/local/include:usr/include
export C_INCLUDE_PATH=/usr/local/include:usr/include

source生效后继续make

但还是报错。

怀疑是没有清除上一次的cache,于是删除build文件夹后重新跑了一遍configure,但还是报错。搜索了一下这个错误原因,发现大多是指向没有安装g++导致的,于是跑去安装g++。

G++安装

我参考了这篇blog发现也提到了,GCC的安装除了之前的几个依赖之外,确实需要G++的依赖支持。
GCC的安装依赖G++

我们选择的版本为:

在这里插入代码片

我查询了一些文档,发现g++在之后不会单独发行,已经变成了GCC不可或缺的一部分被融合进了之后的GCC版本包。

注意这里关于g++不再单独发行的说明(也可以从这里下载安装gcc任意版本以及依赖包)

2020-03-02

经过讨论发现是GCC版本过高造成的以上错误,故现在使用低版本的GCC尝试编译安装。就使用4.8.5的版本,刚好可以支持C++11标准即可。

GCC编译(阶段三)

编译通过。

这里有几个有趣的细节需要注意一下:

GCC编译安装make阶段非常长,在服务器上大概跑了有两个小时,并且注意到其实它编译了不止一遍,每次编译完成后都会与上一次编译的结果进行比对,最终可能是编译了三到四遍才算成功。搜索后发现这是编译器“自举”测试,用于验证编译器的可靠性而设置的。

切换版本

先将当前下载版本4.8.5版本的gcc加入路径。如下:

# gcc

export GCC_ROOT=$CTR_CPP_LIB_ROOT/GCC/4.8.5_installed
export PATH=$PATH:$GCC_ROOT/bin 
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:$GCC_ROOT/include
export C_INCLUDE_PATH=$C_INCLUDE_PATH:$GCC_ROOT/include
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$GCC_ROOT/lib 
export LIBRARY_PATH=$LIBRARY_PATH:$GCC_ROOT/lib 

并运行gcc -v或g++ -v,测试到底是哪个版本的gcc被检测到。结果如下:

Using built-in specs.
Target: x86_64-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-libgcj-multifile --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --disable-plugin --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --with-cpu=generic --host=x86_64-redhat-linux
Thread model: posix
gcc version 4.1.2 20080704 (Red Hat 4.1.2-54)  

发现还是之前版本的gcc。

于是进行高低版本gcc的切换:想着是将原来版本的文件移动到另一个文件夹下,使其找不到,这样就只能检测到高版本的gcc,但这样一个个文件的操作过于繁琐,gcc提供的命令有很多不仅仅有gcc和g++。看网上的一些思路也不是很靠谱(软链接)。

想到的方法是将我们的gcc的可执行文件搜索路径提前,优先于/usr/bin文件夹下的命令被找到,即可。于是将上面的path等变量进行修改如下:

# gcc

export GCC_ROOT=$CTR_CPP_LIB_ROOT/GCC/4.8.5_installed
export PATH=$GCC_ROOT/bin:$PATH
export CPLUS_INCLUDE_PATH=$GCC_ROOT/include:$CPLUS_INCLUDE_PATH
export C_INCLUDE_PATH=$GCC_ROOT/include:$C_INCLUDE_PATH
export LD_LIBRARY_PATH=$GCC_ROOT/lib:$LD_LIBRARY_PATH
export LIBRARY_PATH=$GCC_ROOT/lib:$LIBRARY_PATH

再次进行验证如下:

$ gcc -v 
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/home/tianrui.cui/dlb-lib/GCC/4.8.5_installed/libexec/gcc/x86_64-unknown-linux-gnu/4.8.5/lto-wrapperTarget: x86_64-unknown-linux-gnu
Configured with: ../configure --prefix=/home/tianrui.cui/dlb-lib/GCC/4.8.5_installed/ --disable-multilib
Thread model: posix
gcc version 4.8.5 (GCC)  

另外:

$ c++ -v
Using built-in specs.
COLLECT_GCC=c++
COLLECT_LTO_WRAPPER=/home/tianrui.cui/dlb-lib/GCC/4.8.5_installed/libexec/gcc/x86_64-unknown-linux-gnu/4.8.5/lto-wrapperTarget: x86_64-unknown-linux-gnu
Configured with: ../configure --prefix=/home/tianrui.cui/dlb-lib/GCC/4.8.5_installed/ --disable-multilib
Thread model: posix
gcc version 4.8.5 (GCC)  

更新成功,以下进行编译测试:
写一个helloworld测试程序:

#include <iostream>
#include <string>
using namespace std;

int main(void)
{
    cout<<"Morning CTR_Temp, You should Carry On!"<<endl;
    
    return 0;
}

编译测试:

$ g++ hello_world_test.cpp
$ ./a.out
Morning CTR_Temp, You should Carry On!

测试通过。

gcc安装更新成功。

CMake重新部署(阶段二)

继续进行CMake的重新部署:

仍然选择版本:3.22.2

报错如下:

/home/tianrui.cui/dlb-lib/CMake/cmake-3.22.2/Utilities/cmlibuv/src/unix/core.c: In function ‘uv__dup2_cloexec’:
/home/tianrui.cui/dlb-lib/CMake/cmake-3.22.2/Utilities/cmlibuv/src/unix/core.c:1041:26: error: ‘O_CLOEXEC’ undeclared
(first use in this function)
r = dup3(oldfd, newfd, O_CLOEXEC);  

/home/tianrui.cui/dlb-lib/CMake/cmake-3.22.2/Utilities/cmlibuv/src/unix/core.c:1041:26: note: each undeclared identifier is reported only once for each function it appears in
gmake: *** [uv-src-unix-core.c.o] Error 1
--------------------------------------------- 
Error when bootstrapping CMake:
Problem while running gmake
---------------------------------------------
Log of errors: /home/tianrui.cui/dlb-lib/CMake/cmake-3.22.2/build/Bootstrap.cmk/cmake_bootstrap.log 

这次不去做过多的改进,直接尝试低版本的CMake:

version:2.8.12

这次的报错如下:

/home/tianrui.cui/dlb-lib/CMake/CMake-2.8.12/build/Bootstrap.cmk/cmake: /usr/lib64/libstdc++.so.6:
version `GLIBCXX_3.4.15` not found (required by /home/tianrui.cui/dlb-lib/CMake/CMake-2.8.12/build/Bootstrap.cmk/cmake)
--------------------------------------------
Error when bootstrapping CMake:
Problem while running initial CMake
--------------------------------------------- 

想到当时的lib64库没有加进去,这次将lib64加入环境变量如下:

xxx

还需要注意一点,虽然可以使用module这个方式,但是你还是要留意一下关于在服务器与本地的不同,服务器上你无法使用超级用户模式,一些库无法引进改变,就比如这次遇到的gcc和cmake的编译安装问题,如果你是一个普通用户,如何完成完整的gcc与cmake更新呢?(lib64库问题尤其凸显)

观察Jiang.Zhang的文件夹,发现可以使用module来引入这些变量,下午来了总结关于module的使用方法。
关于可以如何添加/改变变量,如何使用module移除我想移除的包,并使用env观察变量的变化。

阶段二(总)

现在使用module load来导入库模块,首先对module做一个简要介绍,以mpi为例:

在于/home/同级的/opt/目录下,我们可以看到之前安装的许多库文件,我们最终想要导入的库就来源于此。

在用户根目录下,在.bashrc中使用module load命令,最前加入:

module load mpich/3.0.3

mpich是库文件名,后面是版本号,module会在各个目录下寻找后将其导入我们当前的环境,并设置/添加环境变量。

退出.bashrc文件使用source使其生效后查看环境变量,发现以下几条发生了改变:

$ echo $PATH 
...... :/opt/mpich-3.0.3/bin: ......
$ echo $LIBRARY_PATH
...... :/opt/mpich-3.0.3/lib: ......
$ echo $LD_LIBRARY_PATH
...... :/opt/mpich-3.0.3/lib: ......
$ echo $C_PATH
...... :/opt/mpich-3.0.3/include: ......
$ echo $MANPATH 
...... :/opt/mpich-3.0.3/share/man: ......
$ echo $MPICC
MPICC=mpicc
$ echo $MPICXX
mpicxx
$ echo $LOADMODULES
...... :mpi/mpich-3.0.3: ......
$ echo $_LMFILES_
...... :/usr/local/Modules/3.2.10/modulefiles/mpi/mpich-3.0.3: ......

当然我们也可以使用module unload xxx来取消这个包(命令行直接输入或者加入.bashrc再source运行一下使其生效),相当于删除了以上的那些变量。(已经进行过测试,奏效)

现在根据需求导入这些库如下:

module load cmake/2.8.12.2
module load mpi/mpich-3.0.3
module load boost/1.53.0
module load protobuf/2.6.1
module load hdf5/1.8.14

暂时只load这几个库,其他的使用export自行添加环境变量。目前还剩需要添加的库有:METIS、ParMETIS、NetCDF、Parallel_NetCDF、Zoltan

NetCDF安装部署:

C部分

version:4.8.1 for C

这里省去解压环节。

$ cd /home/tianrui.cui/dlb-lib/NetCDF
$ mkdir server_installed
$ cd server_installed
$ mkdir C
$ cd /home/tianrui.cui/dlb-lib/NetCDF/netcdf-c-4.8.1
$ mkdir server_build
$ cd server_build
$ ../configure --prefix=/home/tianrui.cui/dlb-lib/NetCDF/server_installed/C/
# 等待几秒钟
$ make 
# 等待几分钟

make 阶段报错:

../../oc2/occurlfunctions.c: In function ‘ocset_curlflag’:
../../oc2/occurlfunctions.c:167:10: error: ‘CURLOPT_USE_SSL’ undeclared (first use in this function)
case CURLOPT_USE_SSL:    

../../oc2/occurlfunctions.c:167:10: note: each undeclared identifier is reported only once for each function it appears in
../../oc2/occurlfunctions.c: In function ‘ocset_flags_perlink’: 
../../oc2/occurlfunctions.c:225:54: error: ‘CURLOPT_USE_SSL’ undeclared (first use in this function)
if(stat == OC_NOERR) stat = ocset_curlflag(state,CURLOPT_USE_SSL); 

怀疑是curl库出错,于是在.bashrc中将其导入,加入如下(参考jiang.zhang的问件,另外也加入了OpenSSL):

module load openssl/1.0.2r                                                                                              module load curl/7.64.1 

之后source使其生效,继续make。

问题解决!make成功,后续的make install也成功。

在.bashrc中添加环境变量:

# NetCDF

export NETCDF_ROOT=$CTR_CPP_LIB_ROOT/NetCDF/server_installed

# pure C

export PATH=$PATH:$NETCDF_ROOT/C/bin 
export C_PATH=$C_PATH:$NETCDF_ROOT/C/include
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:$NETCDF_ROOT/C/include
export C_INCLUDE_PATH=$C_INCLUDE_PATH:$NETCDF_ROOT/C/include
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$NETCDF_ROOT/C/lib 
export LIBRARY_PATH=$LIBRARY_PATH:$NETCDF_ROOT/C/lib 

source使其生效

CXX部分

version 4.3.1 for Cpp

$ cd /home/tianrui.cui/dlb-lib/NetCDF/server_installed
$ mkdir CXX
$ cd /home/tianrui.cui/dlb-lib/NetCDF/netcdf-cxx4-4.3.1
$ mkdir server_build
$ cd server_build
$ ../configure --prefix=/home/tianrui.cui/dlb-lib/NetCDF/server_installed/CXX/
# 等待几秒钟
$ make 
# 等待几分钟

make阶段报错如下:

../../cxx4/ncVar.cpp: In member function ‘void
netCDF::NcVar::setFilter(unsigned int, size_t, const unsigned int*) const’:
../../cxx4/ncVar.cpp:630:58: error: ‘nc_def_var_filter’ was not declared in this scope
ncCheck(nc_def_var_filter(groupId,myId,id,nparams,parms),__FILE__,__LINE__);                                                                                                 ^
../../cxx4/ncVar.cpp: In member function ‘void
netCDF::NcVar::getFilter(unsigned int*, size_t*, unsigned int*) const ’:
../../cxx4/ncVar.cpp:636:65: error: ‘nc_inq_var_filter’ was not declared in this scope
ncCheck(nc_inq_var_filter(groupId, myId, idp, nparamsp, params),__FILE__,__LINE__); 

应该是出现了某个未定义的变量/字符,因为NetCDF-cxx需要NetCDF作为依赖,故这里很可能是NetCDF-cxx版本太高了,用到的某些东西NetCDF没有提供,现在转向使用较低版本的NetCDF-cxx

version 4.2 for cpp

$ cd /home/tianrui.cui/dlb-lib/NetCDF
$ tar -zxvf netcdf-cxx-4.2.tar.gz
$ cd netcdf-cxx-4.2 
$ mkdir server_build
$ cd server_build
$ ../configure --prefix=/home/tianrui.cui/dlb-lib/NetCDF/server_installed/CXX/
# 等待几秒钟
$ make 
# 等待几分钟
$ make install 

成功!make通过,make install通过

加入环境变量,修改.bashrc文件如下:

# Cpp

# export PATH=$PATH:$NETCDF_ROOT/CXX/bin 
export C_PATH=$C_PATH:$NETCDF_ROOT/CXX/include
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:$NETCDF_ROOT/CXX/include
export C_INCLUDE_PATH=$C_INCLUDE_PATH:$NETCDF_ROOT/CXX/include
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$NETCDF_ROOT/CXX/lib 
export LIBRARY_PATH=$LIBRARY_PATH:$NETCDF_ROOT/CXX/lib 

source使其生效

Parallel NetCDF部署安装

version 1.12.2

$ cd /home/tianrui.cui/dlb-lib/Parallel_NetCDF
$ mkdir server_install
$ cd pnetcdf-1.12.2   
$ mkdir server_build
$ cd server_build
$ ../configure --prefix=/home/tianrui.cui/dlb-lib/Parallel_NetCDF/server_installed
# 等待几秒钟
$ make 
# 等待几分钟
$ make install 

成功通过!

注意这里configure阶段默认是build静态链接库的:

PnetCDF Version 1.12.2

Features:  Build static libraries           - yes
Build shared libraries                      - no
Build Fortran APIs                          - yes
Build C++ APIs                              - yes
Compilers: MPICC    = /opt/mpich-3.0.3/bin/mpicc
MPICXX   = /opt/mpich-3.0.3/bin/mpicxx
MPIF77   = /opt/mpich-3.0.3/bin/mpif77
MPIF90   = /opt/mpich-3.0.3/bin/mpif90
CFLAGS   = -g -O2
CXXFLAGS = -g -O2
FFLAGS   = -g -O2
FCFLAGS  = -g -O2   

加入环境变量,修改.bashrc文件如下:

# Parallel_NetCDF

export PNETCDF_ROOT=$CTR_CPP_LIB_ROOT/Parallel_NetCDF/server_installed


export PATH=$PATH:$PNETCDF_ROOT/bin 
export C_PATH=$C_PATH:$PNETCDF_ROOT/include
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:$PNETCDF_ROOT/include
export C_INCLUDE_PATH=$C_INCLUDE_PATH:$PNETCDF_ROOT/include
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PNETCDF_ROOT/lib 
export LIBRARY_PATH=$LIBRARY_PATH:$PNETCDF_ROOT/lib

source使其生效

METIS安装

version:5.1.0

$ cd /home/tianrui.cui/dlb-lib/METIS/
$ mkdir server_installed
$ cd metis-5.1.0
$ make config shared=1 cc=gcc prefix=../../../server_installed
$ make install 

以上仅仅生成了动态链接库(.so),下面生成静态链接库:

$ cd /home/tianrui.cui/dlb-lib/METIS/metis-5.1.0/build
$ rm -rf Linux-x86_64/
$ mkdir Linux-x86_64
$ cd Linux-x86_64
$ cmake /home/tianrui.cui/dlb-lib/METIS/metis-5.1.0 -DCMAKE_VERBOSE_MAKEFILE=1 -DGKLIB_PATH=/home/tianrui.cui/dlb-lib/METIS/metis-5.1.0/GKlib -DCMAKE_INSTALL_PREFIX=../../../server_installed -DSHARED=0 -DCMAKE_C_COMPILER=gcc
$ make install 

成功安装检查发现静态链接库已经生成。

加入环境变量,修改.bashrc文件如下:

# METIS
export METIS_ROOT=$CTR_CPP_LIB_ROOT/METIS/server_installed


export PATH=$PATH:$METIS_ROOT/bin 
export C_PATH=$C_PATH:$METIS_ROOT/include
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:$METIS_ROOT/include
export C_INCLUDE_PATH=$C_INCLUDE_PATH:$METIS_ROOT/include
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$METIS_ROOT/lib 
export LIBRARY_PATH=$LIBRARY_PATH:$METIS_ROOT/lib

source使其生效

ParMETIS安装(阶段一)

version:4.0.3

$ cd /home/tianrui.cui/dlb-lib/ParMETIS/
$ mkdir server_installed
$ cd parmetis-4.0.3 
$ make config shared=1 cc=gcc prefix=../../../server_installed
$ make install

以上报错说没有检测到mpi.h文件,检查env后发现原来是module模块没有设置include相关的路径,于是在.bashrc文件module load后面紧接着加上关于include的查找路径。然而仍报错,这次是库的相关问题,想到本次使用的是mpich,对比mpich和openmpi后发现很多库缺失(可能是版本问题),于是重新编译安装我们的新版本OpenMPI。

MPI安装

常规流程

$ cd  /home/tianrui.cui/dlb-lib/MPI/OpenMPI
$ mkdir server_installed
$ cd openmpi-4.1.2/build
$ ../configure --prefix=/home/tianrui.cui/dlb-lib/MPI/OpenMPI/installed
#等待一分钟
$ make 
#等待十几分钟到几十分钟
$ make install
#等待一分钟

较为顺利的通过编译。

加入环境变量,修改.bashrc文件如下:

# MPI
export MPI_ROOT=$CTR_CPP_LIB_ROOT/MPI/OpenMPI/server_installed

export PATH=$PATH:$MPI_ROOT/bin 
export C_PATH=$C_PATH:$MPI_ROOT/include
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:$MPI_ROOT/include
export C_INCLUDE_PATH=$C_INCLUDE_PATH:$MPI_ROOT/include
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MPI_ROOT/lib 
export LIBRARY_PATH=$LIBRARY_PATH:$MPI_ROOT/libROOT/lib

source使其生效

检查:

$ mpirun --version
mpirun (Open MPI) 4.1.2
Report bugs to http://www.open-mpi.org/community/help/

通过

ParMETIS安装(阶段二)

继续对ParMETIS进行安装:

$ cd /home/tianrui.cui/dlb-lib/ParMETIS/parmetis-4.0.3
# 之前都是在上级目录make的
$ make config shared=1 cc=gcc prefix=../../../server_installed
$ make 

报错,没有报和之前相同的MPI编译器找不到的错误,反而是报找不到mpi很多函数,但这里仍然怀疑是没有指定mpicc和mpicxx的绝对路径。如下修改:

$ cd /home/tianrui.cui/dlb-lib/ParMETIS/parmetis-4.0.3/build
$ rm -rf Linux-x86_64
$ mkdir Linux-x86_64
$ cd Linux-x86_64
$ cmake /home/tianrui.cui/dlb-lib/ParMETIS/parmetis-4.0.3 -DCMAKE_VERBOSE_MAKEFILE=1 -DGKLIB_PATH=/home/tianrui.cui/dlb-lib/ParMETIS/parmetis-4.0.3/metis/GKlib/ -DMETIS_PATH=/home/tianrui.cui/dlb-lib/ParMETIS/parmetis-4.0.3/metis/  -DCMAKE_INSTALL_PREFIX=../../../server_installed -DSHARED=1 -DCMAKE_C_COMPILER=/home/tianrui.cui/dlb-lib/MPI/OpenMPI/server_installed/bin/mpicc -DCMAKE_CXX_COMPILER=/home/tianrui.cui/dlb-lib/MPI/OpenMPI/server_installed/bin/mpicxx
$ make 
$ make install

编译和安装通过

以上仅仅安装了动态链接库,下面安装静态库,只需要修改这一步

$ cd /home/tianrui.cui/dlb-lib/ParMETIS/parmetis-4.0.3/build/Linux-x86_64
$ cmake /home/tianrui.cui/dlb-lib/ParMETIS/parmetis-4.0.3 -DCMAKE_VERBOSE_MAKEFILE=1 -DGKLIB_PATH=/home/tianrui.cui/dlb-lib/ParMETIS/parmetis-4.0.3/metis/GKlib/ -DMETIS_PATH=/home/tianrui.cui/dlb-lib/ParMETIS/parmetis-4.0.3/metis/  -DCMAKE_INSTALL_PREFIX=../../../server_installed -DSHARED=0 -DCMAKE_C_COMPILER=/home/tianrui.cui/dlb-lib/MPI/OpenMPI/server_installed/bin/mpicc -DCMAKE_CXX_COMPILER=/home/tianrui.cui/dlb-lib/MPI/OpenMPI/server_installed/bin/mpicxx

成功。

加入环境变量,修改.bashrc文件如下:

# ParMETIS

export PARMETIS_ROOT=$CTR_CPP_LIB_ROOT/ParMETIS/server_installed

export PATH=$PATH:$PARMETIS_ROOT/bin 
export C_PATH=$C_PATH:$PARMETIS_ROOT/include
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:$PARMETIS_ROOT/include
export C_INCLUDE_PATH=$C_INCLUDE_PATH:$PARMETIS_ROOT/include
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PARMETIS_ROOT/lib 
export LIBRARY_PATH=$LIBRARY_PATH:$PARMETIS_ROOT/lib

source使其生效

Zoltan安装


$ cd  /home/tianrui.cui/dlb-lib/Zoltan
$ mkdir server_installed
$ cd Zoltan-3.83/build
$ ../configure --prefix=/home/tianrui.cui/dlb-lib/Zoltan/server_installed
#等待几秒钟
$ make 
#等待几分钟
$ make install
#等待几秒钟

较为顺利的通过编译。

加入环境变量,修改.bashrc文件如下:

# Zoltan

export ZOLTAN_ROOT=$CTR_CPP_LIB_ROOT/Zoltan/server_installed

# export PATH=$PATH:$ZOLTAN_ROOT/bin 
export C_PATH=$C_PATH:$ZOLTAN_ROOT/include
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:$ZOLTAN_ROOT/include
export C_INCLUDE_PATH=$C_INCLUDE_PATH:$ZOLTAN_ROOT/include
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ZOLTAN_ROOT/lib 
export LIBRARY_PATH=$LIBRARY_PATH:$ZOLTAN_ROOT/lib

source使其生效

阶段三(总)

cmake,findpackage测试,还是使用之前的test程序(一个简单的helloworld)

查看CMakeLists文件:

cmake_minimum_required(VERSION 2.5 FATAL_ERROR)
project(PRJ_Name_Any LANGUAGES CXX)
add_executable(test_exe_name test.cpp) 

报错找不到文件CMakeLANGUAGESInformation.cmake,后发现这个文件是CMake3.x版本才存在的,于是查看LANGUAGES字段的来由:发现是CMake3.2之后新加入的特性,故在此可以取消,继续编译:

cmake_minimum_required(VERSION 2.5 FATAL_ERROR)
project(PRJ_Name_Any)
add_executable(test_exe_name test.cpp) 
$ cd /home/tianrui.cui/test/build
$ cmake ..
$ cmake --build .
$ ./test_exe_name
Good Nigth CTR_Temp, You should Carry On!

测试成功通过。

下一步测试find_package()如下先测试mpi:

cmake_minimum_required(VERSION 2.5 FATAL_ERROR)
project(PRJ_Name_Any)
add_executable(test_exe_name test.cpp) 
find_package(MPI REQUIRED)

测试:

$ cd /home/tianrui.cui/test/build
$ cmake ..
-- Found MPI_C: /home/tianrui.cui/dlb-lib/MPI/OpenMPI/server_installed/lib/libmpi.so
-- Found MPI_CXX: /home/tianrui.cui/dlb-lib/MPI/OpenMPI/server_installed/lib/libmpi.so
-- Configuring done
-- Generating done
-- Build files have been written to: /home/tianrui.cui/test/build

成功通过。

2022-03-03

hdf5部署安装

不再叙述详细过程。。。具体方法参加本系列第一个部分。

工程编译

有一部分文件的修改,现在将这些相关文件进行一个备份:
上传链接(审核中)

工程顺利编译通过。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值