【2023·CANN训练营第一季】ResNet50图片分类应用——编译程序

【2023·CANN训练营第一季】ResNet50图片分类应用——编译程序

配置环境变量

完成了环境、资源的准备,将资源进行预处理之后就进入到正式的模型编译执行环节啦

没有完成环境、资源准备的同学们先看我前两篇文章

请注意,下文中的样例目录均指“cplusplus/level2_simple_inference/1_classification/resnet50_imagenet_classification”目录。

export APP_HOME=$HOME/samples/cplusplus/level2_simple_inference/1_classification/resnet50_imagenet_classification
# 样例目录

编译文件涉及的代码结构

├── src
│   ├── acl.json         //系统初始化的配置文件
│   ├── CMakeLists.txt         //编译脚本
│   ├── main.cpp               //主函数,图片分类功能的实现文件
│   ├── model_process.cpp      //模型处理相关函数的实现文件
│   ├── sample_process.cpp     //资源初始化/销毁相关函数的实现文件                                          
│   ├── utils.cpp              //公共函数(例如:文件读取函数)的实现文件

├── .project     //工程信息文件,包含工程类型、工程描述、运行目标设备类型等
├── CMakeLists.txt    //编译脚本,调用src目录下的CMakeLists文件

配置程序编译依赖的头文件与库文件路径

设置以下环境变量后,编译脚本会根据“{DDK_PATH}环境变量值/runtime/include/acl”目录查找编译依赖的头文件,根据{NPU_HOST_LIB}环境变量指向的目录查找编译依赖的库文件。“$HOME/Ascend”请替换“Ascend-cann-toolkit”包的实际安装路径。

注意,在配置{NPU_HOST_LIB}环境变量时,需使用的“runtime/lib64/stub”目录下*.so库,确保在编译基于AscendCL接口的应用程序时,不依赖其它组件(例如Driver)的*.so库,编译成功后,运行应用程序时,系统会根据LD_LIBRARY_PATH环境变量查找“Ascend-cann-toolkit安装目录/runtime/lib64”目录下的*.so库,同时会自动链接到所依赖的其它组件的*.so库。

  • 开发环境与运行环境的操作系统架构相同时,配置示例如下所示:

    export DDK_PATH=$HOME/Ascend/ascend-toolkit/latest
    export NPU_HOST_LIB=$DDK_PATH/runtime/lib64/stub
    
  • 开发环境与运行环境的操作系统架构不同时,配置示例如下所示:

    例如,当开发环境为X86架构、运行环境为AArch64架构时,则涉及交叉编译,需在开发环境上安装AArch64架构的软件包,将{DDK_PATH}环境变量的路径指向AArch64架构的软件包安装目录(如下所示),便于使用与运行环境架构相同的软件包中的头文件和库文件来编译代码。

    您可以登录对应的环境,执行“uname -a”命令查询其操作系统的架构

    export DDK_PATH=$HOME/Ascend/ascend-toolkit/latest/arm64-linux
    export NPU_HOST_LIB=$DDK_PATH/runtime/lib64/stub
    

编译代码

1. 创建目录存放编译文件

切换到样例目录,创建目录用于存放编译文件,例如,本文中,创建的目录为“build/intermediates/host“。

cd $APP_HOME
mkdir -p build/intermediates/host	# 创建目录存放编译文件  
2. 生成编译文件

切换到“build/intermediates/host“目录,执行如下命令生成编译文件。

cd build/intermediates/host
  • 开发环境与运行环境操作系统架构相同时,执行如下命令编译

    cmake ../../../src -DCMAKE_CXX_COMPILER=g++ -DCMAKE_SKIP_RPATH=TRUE
    
  • 开发环境与运行环境操作系统架构不同时,执行以下命令进行交叉编译

    cmake ../../../src -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -DCMAKE_SKIP_RPATH=TRUE
    

../../../src“表示CMakeLists.txt文件所在的目录,请根据实际目录层级修改。

  • DCMAKE_CXX_COMPILER

    编译器

  • DCMAKE_SKIP_RPATH

    设置为TRUE,代表不会将rpath信息(即NPU_HOST_LIB配置的路径)添加到编译生成的可执行文件中去,可执行文件运行时会自动搜索实际设置的LD_LIBRARY_PATH中的动态链接库

3. 编译

执行如下命令,生成的可执行文件main在“样例目录/out“目录

make

在这里插入图片描述

好了,今天编译的过程就讲到这里,明天我们继续讲解运行和修改程序的部分

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值