---
title: 工程编译
description: "在udf_workspace/01_udf_add目录下创建build和release目录："
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/others/dataflowdevg/dfdevc_23_0019.html
sourcePath: /source/zh/canncommercial/900/others/dataflowdevg/dfdevc_23_0019.html
indexId: 5a22646592a90088f22698f6daa05efa1e37cde9b640d675793175db6e11c62869
---
# 工程编译

在udf_workspace/01_udf_add目录下创建build和release目录：

编译完成后在workspace/udf_add/release目录下生成编译成功的so。

1. 创建build目录。

```
mkdir -p build
```


2. 创建release目录。

```
mkdir -p release
```


3. 进入build目录。

```
cd build
```


4. 配置环境变量，当前以非root用户安装Toolkit后的默认路径为例，请用户根据set_env.sh的实际路径执行如下命令。

```
source ${HOME}/Ascend/cann/set_env.sh
```


  上述环境变量配置只在当前窗口生效，用户可以按需将以上命令写入环境变量配置文件（如.bashrc文件）。

5. 工程编译

  - 非交叉编译场景（开发环境和运行环境的架构一致）下示例如下：编译x86_64类型的so，指定target lib为libadd.so，编译工具为g++。

```
cmake .. -DTOOLCHAIN=g++ -DRELEASE_DIR=../release -DRESOURCE_TYPE=X86 -DUDF_TARGET_LIB=add && make
```


    - -DTOOLCHAIN：编译工具名称。比如g++。
    - -DRELEASE_DIR：编译完成后，目标文件存放路径。
    - -DRESOURCE_TYPE：编译的资源类型，可以取值：X86或者Aarch或者Ascend。

      - X86：目标so需要部署在X86架构的Host时，配置为X86。
      - Aarch：目标so需要部署在Aarch的Host时，配置为Aarch。
      - Ascend：目标so需要部署在Device时，配置为Ascend。
    - -DUDF_TARGET_LIB：编译完成后，目标so的名称。比如，设置为add，实际生成libadd.so。
  - 交叉编译（开发环境是x86_64，运行环境是aarch64）场景下，编译Ascend类型的so, 指定target lib为libadd.so，编译工具为${INSTALL_DIR}/toolkit/toolchain/hcc/bin/aarch64-target-linux-gnu-g++。${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。以root用户安装为例，安装后文件默认存储路径为：/usr/local/Ascend/cann。
    示例如下：

```
cmake .. -DTOOLCHAIN=${INSTALL_DIR}/toolkit/toolchain/hcc/bin/aarch64-target-linux-gnu-g++ -DRELEASE_DIR=../release -DRESOURCE_TYPE=Ascend -DUDF_TARGET_LIB=add && make
```
