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

#### 操作步骤

1. 使用PuTTY工具，以root用户登录服务器。
2. 执行以下命令进入源码安装目录。

```
cd
/path/to/MEGAHIT
```


3. 执行以下命令解压源码包。

```
tar -xvf v1.2.9.tar.gz
```


4. 执行以下命令进入解压后的文件夹。

```
cd megahit-1.2.9
```


5. 执行以下命令修改“CMakeLists.txt”文件。

  a. 打开“CMakeLists.txt”文件。

```
vi CMakeLists.txt
```


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

```
6     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
…
76 set_target_properties(megahit_core PROPERTIES COMPILE_FLAGS "-mbmi2 -DUSE_BMI2 -mpopcnt")
77 set_target_properties(megahit_core_popcnt PROPERTIES COMPILE_FLAGS "-mpopcnt")
```


    修改后：

```
6     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -march=armv8.2-a")
…
76 set_target_properties(megahit_core PROPERTIES COMPILE_FLAGS "")
77 set_target_properties(megahit_core_popcnt PROPERTIES COMPILE_FLAGS "")
```


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

```
cd ./src/utils/
```


7. 执行以下命令拷贝鲲鹏代码迁移工具中的头文件到当前目录。

```
cp
/path/to/PORT_ADVISOR
/portadv/tools/inline_asm/config/KunpengTrans.h ./
```


8. 执行以下命令修改代码“cpu_dispatch.h”。

```
vi cpu_dispatch.h
```


  新增代码已标记：

```
#if defined(__aarch64__)
//新增代码
#include "KunpengTrans.h"
//新增代码
#endif
//新增代码
#ifndef MEGAHIT_CPU_DISPATCH_H
#define MEGAHIT_CPU_DISPATCH_H
inline bool HasPopcnt() {
unsigned eax, ebx, ecx, edx;
#ifdef _MSC_VER
int cpuid[4];
__cpuid(cpuid, 1);
eax = cpuid[0], ebx = cpuid[1], ecx = cpuid[2], edx = cpuid[3];
#else
#if defined(__x86_64__)
//新增代码
asm volatile("cpuid\n\t"
: "=a"(eax), "=b"(ebx), "=c"(ecx), "=d"(edx)
: "0"(1));
#elif defined(__aarch64__)
//新增代码
{
eax = 1;
//新增代码
GetSupportedCPUID(&eax,&ebx,&ecx,&edx);
//新增代码
}
#endif
//新增代码
#endif
return ecx >> 23U & 1U;
}
inline bool HasBmi2() {
unsigned eax, ebx, ecx, edx;
#ifdef _MSC_VER
int cpuid[4];
__cpuidex(cpuid, 7, 0);
eax = cpuid[0], ebx = cpuid[1], ecx = cpuid[2], edx = cpuid[3];
#else
#if defined(__x86_64__)
//新增代码
asm volatile("cpuid\n\t"
: "=a"(eax), "=b"(ebx), "=c"(ecx), "=d"(edx)
: "0"(7), "2"(0));
#elif defined(__aarch64__)
//新增代码
{
eax = 7;
//新增代码
ecx = 0;
//新增代码
GetSupportedCPUID(&eax,&ebx,&ecx,&edx);
//新增代码
}
#endif
//新增代码
#endif
return ebx >> 8U & 1U;
}
#endif  // MEGAHIT_CPU_DISPATCH_H
```


9. 执行以下命令切换目录。

```
cd ../kmlib/
```


10. 执行以下命令修改代码kmrns.h，替换头文件。

```
vi kmrns.h
```


  修改前：

```
#include <x86intrin.h>
```


  修改后：

```
#include <sse2neon.h>
```


11. 执行以下命令拷贝sse2neon.h头文件到src目录。

```
cp
/path/to/SSE2NEON
/sse2neon-1.5.0/sse2neon.h
/path/to/MEGAHIT
/megahit-1.2.9/src
```


12. 执行以下命令创建并进入构建文件夹。

```
mkdir
/path/to/MEGAHIT
/build && cd
/path/to/MEGAHIT
/build
```


13. 执行以下命令进行编译安装。

```
CC=`which gcc` CXX=`which g++` cmake -DCMAKE_INSTALL_PREFIX=
/path/to/MEGAHIT
-DCMAKE_BUILD_TYPE=Release ../
make -j 16
make install
```


14. 执行以下命令加载环境变量。

```
export PATH=
/path/to/MEGAHIT
/bin:$PATH
```
