---
title: 编译和安装
description: "1. 使用PuTTY工具，以root用户登录服务器。"
url: https://www.hikunpeng.com/document/detail/zh/kunpenghpcs/hpcindapp/prtg-osc/openmind_kunpengsmoke_02_0011.html
sourcePath: /source/zh/kunpenghpcs/hpcindapp/prtg-osc/openmind_kunpengsmoke_02_0011.html
indexId: 680018fd04aacdfe0db4ea295b226f531bfbdf719906abb57f5a27340f73176c76
---
# 编译和安装

#### 安装I/O API

1. 使用PuTTY工具，以root用户登录服务器。
2. 执行以下命令使SMOKE安装运行在csh下。

```
csh
```


3. 执行以下命令设置环境变量。

```
setenv SMK_HOME
/path/to/SMOKE
setenv LD_LIBRARY_PATH
/path/to/BISHENG
/bisheng-1.3.1/lib:
/path/to/HMPI
/hmpi-1.0.2/ompi/lib
setenv PATH
/path/to/HMPI
/hmpi-1.0.2/hmpi/bin:
/path/to/BISHENG
/bisheng-1.3.1/bin:$PATH
setenv LD_LIBRARY_PATH
/path/to/NETCDF
/lib:$LD_LIBRARY_PATH
```


4. 执行以下命令将安装包复制到安装路径下。

```
cp smoke_v47.gz
$SMK_HOME
cp smoke_v47.nctox.data.tar.gz
$SMK_HOME
cp smoke_install.csh
$SMK_HOME
cp ioapi-3.2.tar.gz
$SMK_HOME
cd
$SMK_HOME
source smoke_install_v47.csh
setenv BIN Linux2_aarch64
```


5. 执行以下命令解压并重命名ioapi。

```
tar -xvf ioapi-3.2-2020111.tar.gz
mv ioapi-3.2-2020111 ioapi-3.2
```


6. 执行以下命令复制配置文件。

```
cd ioapi-3.2
cp ioapi/Makeinclude.Linux2_ia64gfort ioapi/Makeinclude.Linux2_aarch64
```


7. 执行以下命令修改“Makeinclude.Linux2_aarch64”配置文件。

  a. 打开“Makeinclude.Linux2_aarch64”配置文件。

```
vi ioapi/Makeinclude.Linux2_aarch64
```


  b. 按“i”进入编辑模式，修改编译器选项（必要时可用绝对路径）。

```
CC = mpicc
CXX = mpicxx
FC = mpif90
```


    注释FSFLAGS关键字对应的行，如#FSFLAGS = -save。

  c. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
8. 执行以下命令复制Makefile。

```
cp ioapi/Makefile.nocpl ioapi/Makefile
```


9. 执行以下命令复制配置文件。

```
cp m3tools/Makefile.nocpl m3tools/Makefile
```


10. 执行以下命令修改“Makefile”配置文件。

  a. 打开“Makefile”配置文件。

```
vi m3tools/Makefile
```


  b. 按“i”进入编辑模式，修改如下内容。

```
LIBS = -L${OBJDIR} -lioapi -L
/path/to/NETCDF
/lib -lnetcdff –lnetcdf -L
/path/to/HDF5
/lib -lhdf5_hl -lhdf5 -lz $(OMPLIBS) $(ARCHLIB) $(ARCHLIBS)
```


  c. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
11. 执行以下命令复制配置文件。

```
cp Makefile.template Makefile
```


12. 执行以下命令编辑配置文件。

  a. 打开配置文件。

```
vi Makefile
```


  b. 按“i”进入编辑模式。
    修改如下内容并取消注释（若出现路径问题可以检查BASEDIR下的路径是否正确）。

```
BIN = Linux2_aarch64
BASEDIR = ${PWD}
INSTALL = ${HOME}
LIBINST = $(INSTALL)/$(BIN)
BININST = $(INSTALL)/$(BIN)
CPLMODE = nocpl
IOAPIDEFS = "-DIOAPI_NCF4"
```


    修改NCFLIBS项：

```
NCFLIBS = -L
/path/to/NETCDF
/lib -lnetcdff -lnetcdf -L
/path/to/HDF5
/lib -lhdf5_hl -lhdf5 -lz
```


  c. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
13. 执行以下命令编译I/O API。

```
make BIN=Linux2_aarch64
```


#### 安装SMOKE

1. 使用PuTTY工具，以root用户登录服务器。
2. 执行以下命令进入“$SMK_HOME/subsys/smoke/assigns/”目录。

```
cd $SMK_HOME/subsys/smoke/assigns/
```


3. 执行以下命令修改“ASSIGNS.nctox.cmaq.cb05_soa.us12-nc”文件。

  a. 打开“ASSIGNS.nctox.cmaq.cb05_soa.us12-nc”文件。

```
vi ASSIGNS.nctox.cmaq.cb05_soa.us12-nc
```


  b. 按“i”进入编辑模式，修改第25行内容。

```
setenv BIN Linux2_aarch64
```


    执行3.a之后，按“Esc”键，输入“:set nu”，按“Enter”即可显示出行号。

  c. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
4. 执行以下命令修改“Makeinclude”文件。

  a. 打开“Makeinclude”文件。

```
cd $SMK_HOME/subsys/smoke/src
vi Makeinclude
```


  b. 按“i”进入编辑模式，修改如下内容（链接库若报错可以加上库所在的绝对路径，格式为-L/绝对路径）。

```
INSTDIR = ${OBJDIR}/${BIN}
#EFLAG = -extend-source 132 -zero
EFLAG = -ffixed-line-length-132 -fno-backslash
IOLIB = -L$(IOBIN) -lioapi -L/path/to/NETCDF/lib -lnetcdf -lnetcdff
IOBASE  = ${SMK_HOME}/ ioapi-3.2
```


  c. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
5. 执行以下命令修改“biog/normbeis361.f”文件。

  a. 打开“biog/normbeis361.f”文件。

```
vi biog/normbeis361.f
```


  b. 按“i”进入编辑模式，修改第161行内容，将IS_AG、IS_TAG两个函数类型由“INTEGER”改为“LOGICAL”。
    执行5.a之后，按“Esc”键，输入“:set nu”，按“Enter”即可显示出行号。

  c. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
6. 执行以下命令修改“emutil/gentpro.f”文件。

  a. 打开“emutil/gentpro.f”文件。

```
vi emutil/gentpro.f
```


  b. 按“i”进入编辑模式，修改第1663和1695行的代码。

```
1663 (( PROF_MON( S,NP )), NP = 1,12 )
1695 ( ( PROF_DAY( S,NP ) ), NP = 1,31 )
```


    执行6.a之后，按“Esc”键，输入“:set nu”，按“Enter”即可显示出行号。

  c. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
7. 执行以下命令创建目录。

```
mkdir ${SMK_HOME}/subsys/smoke/${BIN}
```


8. 执行以下命令运行编译。

```
source
$SMK_HOME
/subsys/smoke/assigns/ASSIGNS.nctox.cmaq.cb05_soa.us12-nc
make
```
