获取应用样例参考章节中应用源码:
fatal error: acl/acl.h: No such file or directory #include "acl/acl.h" ^~~~~~~~~~~ compilation terminated. CMakeFiles/main.dir/build.make:62: recipe for target 'CMakeFiles/main.dir/main.cpp.o' failed make[2]: *** [CMakeFiles/main.dir/main.cpp.o] Error 1 CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/main.dir/all' failed make[1]: *** [CMakeFiles/main.dir/all] Error 2 Makefile:129: recipe for target 'all' failed
/usr/bin/ld: cannot find -lascendcl collect2: error: ld returned 1 exit status CMakeFiles/main.dir/build.make:94: recipe for target '/home/HwHiAiUser/sample/resnet50_firstapp/out/main' failed make[2]: *** [/home/HwHiAiUser/sample/resnet50_firstapp/out/main] Error 1 CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/main.dir/all' failed make[1]: *** [CMakeFiles/main.dir/all] Error 2 Makefile:129: recipe for target 'all' failed
编译应用源码依赖定义AscendCL接口的头文件和库文件,应用样例参考章节中的样例是通过分别配置{DDK_PATH}、{NPU_HOST_LIB}环境变量来查找头文件、库文件,当前报错提示找不到头文件、库文件,则可能是{DDK_PATH}、{NPU_HOST_LIB}环境变量配置地不正确。
样例中的编译脚本会根据“{DDK_PATH}环境变量值/runtime/include/acl”目录查找编译依赖的头文件,因此可先检查“{DDK_PATH}环境变量值/runtime/include/acl”路径是否存在,若存在,则检查该路径下的acl.h头文件是否存在;若路径或头文件有一个不存在,则需要重新配置{DDK_PATH}环境变量,跳转到4。
cd /home/HwHiAiUser/Ascend/ascend-toolkit/latest/runtime/include/acl
ll acl.h
样例中的编译脚本会根据{NPU_HOST_LIB}环境变量指向的路径查找编译依赖的库文件,因此可先检查{NPU_HOST_LIB}环境变量指向的路径是否存在,若存在,则检查该路径下的libascendcl.so库文件是否存在;若路径或库文件有一个不存在,则需要重新配置{NPU_HOST_LIB}环境变量,跳转到4。
cd /home/HwHiAiUser/Ascend/ascend-toolkit/latest/runtime/lib64/stub
ll libascendcl.so
编译脚本会根据“{DDK_PATH}环境变量值/runtime/include/acl”目录查找编译依赖的头文件,根据{NPU_HOST_LIB}环境变量指向的目录查找编译依赖的库文件。“$HOME/Ascend”请替换“Ascend-cann-toolkit”包的实际安装路径。
export DDK_PATH=$HOME/Ascend/ascend-toolkit/latest export NPU_HOST_LIB=$DDK_PATH/runtime/lib64/stub
例如,当开发环境为X86架构、运行环境为AArch64架构时,则涉及交叉编译,需在开发环境上安装AArch64架构的软件包,将{DDK_PATH}环境变量的路径指向AArch64架构的软件包安装目录(如下所示),便于使用与运行环境架构相同的软件包中的头文件和库文件来编译代码。
export DDK_PATH=$HOME/Ascend/ascend-toolkit/latest/arm64-linux export NPU_HOST_LIB=$DDK_PATH/runtime/lib64/stub
当环境上安装多个软件版本时,请根据实际情况选择版本,其中,latest目录默认指向最后安装的软件版本。
当同一个版本下有多个acl.h、libascendcl.so文件时,是由于兼容旧版本的原因,其中部分文件是软链接,方便用户在旧版本下编译应用源码。