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

#### 操作步骤

1. 使用PuTTY工具，以root用户登录服务器。
2. 执行以下命令进入“/path/to/CAFE”目录。

```
cd
/path/to/CAFE
```


3. 执行以下命令解压安装包。

```
tar -xvf v4.2.1.tar.gz
```


4. 执行以下命令创建补丁。

```
vim CAFE.patch
```


  输入以下内容并保存退出。

```
diff -Nur CAFE-4.2.1/cafe/cafe_tree.c CAFE-4.2.1_ok/cafe/cafe_tree.c
--- CAFE-4.2.1/cafe/cafe_tree.c	2019-03-07 22:41:35.000000000 +0800
+++ CAFE-4.2.1_ok/cafe/cafe_tree.c	2024-01-03 10:42:25.712782050 +0800
@@ -71,14 +71,14 @@
void __cafe_tree_free_node(pTree ptree, pTreeNode ptnode, va_list ap1)
{
va_list ap;
-    if (ap1) va_copy(ap, ap1);
+    va_copy(ap, ap1);
pCafeNode pcnode = (pCafeNode)ptnode;
if (pcnode->likelihoods) memory_free(pcnode->likelihoods);
pcnode->likelihoods = NULL;
if (pcnode->viterbi) memory_free(pcnode->viterbi);
pcnode->viterbi = NULL;
__phylogeny_free_node(ptree, ptnode, ap);
-    if (ap1) va_end(ap1);
+    va_end(ap1);
}
@@ -89,7 +89,9 @@
int i;
for ( i = 0 ; i < pcafe->super.nlist->size ; i++ )
{
-			__cafe_tree_free_node((pTree)pcafe, (pTreeNode)pcafe->super.nlist->array[i], NULL );
+			va_list a;
+			va_end (a);
+			__cafe_tree_free_node((pTree)pcafe, (pTreeNode)pcafe->super.nlist->array[i], a );
}
}
else
@@ -314,7 +316,9 @@
}
}
#pragma omp taskwait
-    compute_node_likelihoods(ptree, ptnode, NULL);
+    va_list b;
+    va_end (b);
+    compute_node_likelihoods(ptree, ptnode, b);
}
void compute_tree_likelihoods(pCafeTree pcafe)
diff -Nur CAFE-4.2.1/cafe/viterbi.cpp CAFE-4.2.1_ok/cafe/viterbi.cpp
--- CAFE-4.2.1/cafe/viterbi.cpp	2019-03-07 22:41:35.000000000 +0800
+++ CAFE-4.2.1_ok/cafe/viterbi.cpp	2024-01-03 10:47:51.962782050 +0800
@@ -500,11 +500,15 @@
int i = 0;
for (i = 0; i < postfix->size; i++)
{
-      __cafe_tree_node_compute_viterbi((pTree)pcafe, (pTreeNode)postfix->array[i], NULL);
+      va_list m;
+      va_end (m);
+      __cafe_tree_node_compute_viterbi((pTree)pcafe, (pTreeNode)postfix->array[i], m);
}
for (i = 0; i < prefix->size; i++)
{
-      __cafe_tree_node_backtrack_viterbi((pTree)pcafe, (pTreeNode)prefix->array[i], NULL);
+      va_list j;
+      va_end (j);
+      __cafe_tree_node_backtrack_viterbi((pTree)pcafe, (pTreeNode)prefix->array[i], j);
}
}
else
@@ -532,7 +536,9 @@
int i = 0;
for (i = 0; i < postfix->size; i++)
{
-      __cafe_tree_node_compute_viterbi((pTree)pcafe, (pTreeNode)postfix->array[i], NULL);
+      va_list k;
+      va_end (k);
+      __cafe_tree_node_compute_viterbi((pTree)pcafe, (pTreeNode)postfix->array[i], k);
}
if (param->posterior) {
pCafeNode root = (pCafeNode)postfix->array[postfix->size - 1];
@@ -546,7 +552,9 @@
}
for (i = 0; i < prefix->size; i++)
{
-      __cafe_tree_node_backtrack_viterbi((pTree)pcafe, (pTreeNode)prefix->array[i], NULL);
+      va_list l;
+      va_end (l);
+      __cafe_tree_node_backtrack_viterbi((pTree)pcafe, (pTreeNode)prefix->array[i], l);
}
}
else
diff -Nur CAFE-4.2.1/libtree/phylogeny.c CAFE-4.2.1_ok/libtree/phylogeny.c
--- CAFE-4.2.1/libtree/phylogeny.c	2019-03-07 22:41:35.000000000 +0800
+++ CAFE-4.2.1_ok/libtree/phylogeny.c	2024-01-03 10:53:07.442782050 +0800
@@ -148,7 +148,9 @@
int i;
for ( i = 0 ; i < ptree->nlist->size ; i++ )
{
-			__phylogeny_free_node(ptree, (pTreeNode)ptree->nlist->array[i], NULL );
+			va_list c;
+			va_end (c);
+			__phylogeny_free_node(ptree, (pTreeNode)ptree->nlist->array[i], c );
}
}
else
@@ -585,7 +587,9 @@
pTreeNode sibling = phylogeny_get_sibling(ptree,pnode);
if ( tree_is_root(ptree,pnode->parent) )
{
-		freenode(ptree, ptree->root,NULL);
+		va_list d;
+		va_end (d);
+		freenode(ptree, ptree->root,d);
ptree->root = sibling;
ptree->root->parent = NULL;
}
@@ -603,7 +607,9 @@
grand->children->tail->data = sibling;
}
sibling->parent = grand;
-		freenode(ptree,parent,NULL);
+		va_list e;
+		va_end (e);
+		freenode(ptree,parent,e);
}
tree_build_node_list(ptree);
tree_build_node_list(psubtree);
@@ -618,7 +624,9 @@
pTreeNode sibling = phylogeny_get_sibling(ptree,pnode);
if ( tree_is_root(ptree,pnode->parent) )
{
-		freenode(ptree, ptree->root,NULL);
+		va_list f;
+		va_end (f);
+		freenode(ptree, ptree->root,f);
ptree->root = sibling;
ptree->root->parent = NULL;
}
@@ -636,7 +644,9 @@
grand->children->tail->data = sibling;
}
sibling->parent = grand;
-		freenode(ptree,parent,NULL);
+		va_list g;
+		va_end (g);
+		freenode(ptree,parent,g);
}
Tree tmp;
@@ -724,7 +734,9 @@
for ( i = 0 ; i < nlist->size ; i+=2 )
{
pTreeNode pnode = (pTreeNode)nlist->array[i];
-		filter(ptree,pnode,NULL);
+		va_list h;
+		va_end (h);
+		filter(ptree,pnode,h);
if ( pnode->reg )
{
while( pnode && pnode->reg == 0 )
```


5. 执行以下命令打入补丁。

```
patch -p0 < CAFE.patch
```


6. 执行以下命令进入解压后的目录。

```
cd CAFE-4.2.1
```


7. 执行以下命令生成编译文件。

```
autoconf
CC=clang CXX=clang++ ./configure
```


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

```
make
```
