---
title: 迁移步骤
description: "1. MKL LAPACK提供Fortran和LAPACK（C语言封装）两种接口，KML LAPACK提供的Fortran接口与MKL完全一致，C语言调用时将头文件#include \"mkl.h\"替换为#include \"klapack.h\" 。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/2200/accel/kunpengaccel_12_0022.html
sourcePath: /source/zh/kunpengboostkithistory/2200/accel/kunpengaccel_12_0022.html
indexId: a1bfa62421abb9ca35fe9e65f2d0accecfce85c4d940d6373475b1f38f34f22470
---
# 迁移步骤

#### C语言迁移步骤

1. MKL LAPACK提供Fortran和LAPACK（C语言封装）两种接口，KML LAPACK提供的Fortran接口与MKL完全一致，C语言调用时将头文件#include "mkl.h"替换为#include "klapack.h" 。
2. 在编译链接时，替换MKL相关的链接选项，具体选项请参见《鲲鹏数学库 开发指南(https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/2200/accel/kunpengaccel_kml_16_0218.html)》中生成完整的LAPACK章节的安装后验证部分的说明。

例：迁移前使用Fortran接口：

```
/* Declare the dgetrf interface */
void dgetrf_(int *m, int *n, double *a, int *lda, int *ipiv, int *info);
......
int m = 4;
int n = 4;
int lda = 4;
int ipiv[4];
int info = 0;
double a[] = {1.80,  5.25,  1.58, -1.11,
2.88, -2.95, -2.69, -0.66,
2.05, -0.95, -2.90, -0.59,
-0.89, -3.80, -1.04,  0.80};
dgetrf_(&m, &n, a, &lda, ipiv, &info);
```

迁移前使用LAPACKE接口：

```
#include "mkl.h"
......
int m = 4;
int n = 4;
int lda = 4;
int ipiv[4];
double a[] = {1.80,  5.25,  1.58, -1.11,
2.88, -2.95, -2.69, -0.66,
2.05, -0.95, -2.90, -0.59,
-0.89, -3.80, -1.04,  0.80};
int info = LAPACKE_dgetrf(LAPACK_COL_MAJOR, m, n, a, lda, ipiv);
```

迁移后使用KML LAPACK的Fortran接口：

```
#include "klapack.h"
......
int m = 4;
int n = 4;
int lda = 4;
int ipiv[4];
int info = 0;
double a[] = {1.80,  5.25,  1.58, -1.11,
2.88, -2.95, -2.69, -0.66,
2.05, -0.95, -2.90, -0.59,
-0.89, -3.80, -1.04,  0.80};
dgetrf_(&m, &n, a, &lda, ipiv, &info);
```

与使用MKL的Fortran接口一致，包含klapack.h可得到Fortran接口的C函数声明。

迁移后若需使用LAPACKE接口，需在编译Netlib LAPACK时同时编译LAPACKE，在安装KML_LAPACK的编译原始的Netlib LAPACK库步骤中的cmake命令后添加-DLAPACKE=ON。

```
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DLAPACKE=ON
```

LAPACK编译后会生成liblapacke.a，编译应用时需要增加LAPACKE的头文件路径和LAPACKE库的路径。

```
gcc app.c -o app -fopenmp -I /data/lapack-3.9.1/LAPACKE/include -I $KML_LAPACK_ROOT/include -L $KML_LAPACK_ROOT/lib64 -l:liblapacke.a -l:libklapack.a -L $ADAPT_ROOT -l:liblapack_adapt.a -L $KML_BLAS_ROOT -lkblas -l:libkservice.a -lgfortran -lm
```


#### Fortran接口迁移步骤

Fortran接口与MKL一致，代码无需修改。
