编译应用样例报错,提示找不到库文件
2023/08/07
223
问题信息
问题来源 | 产品大类 | 产品子类 | 关键字 |
---|---|---|---|
官方 | 模型推理 | 应用开发AscendCL | AscendCL、编译 |
问题现象描述
编译Ascend Sample仓中的样例应用程序源码时,报错提示找不到库文件libascendcl.so(报错中的-lascendcl,-l表示查找库文件,ascendcl前后分别加上lib和.so组成库文件的名称libascendcl.so)。
报错示例如下:
/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接口的库文件,样例中的编译脚本会根据{NPU_HOST_LIB}环境变量指向的路径查找编译依赖的库文件,当前报错提示找不到库文件,则可能是{NPU_HOST_LIB}环境变量配置不正确。
解决措施
- 登录编译源码的环境,使用如下命令查看{DDK_PATH}环境变量的值。
echo $NPU_HOST_LIB
回显信息示例如下:
/home/HwHiAiUser/Ascend/ascend-toolkit/latest/runtime/lib64/stub
若无回显信息,则环境变量未配置,跳转到第3步配置该环境变量。
- 根据第1步中获取到的{NPU_HOST_LIB}环境变量值,检查{NPU_HOST_LIB}环境变量指向的路径以及该路径下的libascendcl.so库文件是否存在。
检查路径是否存在时,可直接切换到该目录下看是否成功,命令示例如下:
cd /home/HwHiAiUser/Ascend/ascend-toolkit/latest/runtime/lib64/stub
若目录存在,可直接执行以下命令检查libascendcl.so是否存在:
ll libascendcl.so
若路径或头文件不存在,则需跳转到第3步重新配置{NPU_HOST_LIB}环境变量。
- 配置环境变量。
- 当开发环境与运行环境的操作系统架构相同时,配置示例如下所示:
export NPU_HOST_LIB=$HOME/Ascend/ascend-toolkit/latest/runtime/lib64/stub
- 当开发环境与运行环境的操作系统架构不同时,配置示例如下所示:
例如,当开发环境为X86架构、运行环境为AArch64架构时,则涉及交叉编译,需在开发环境上安装AArch64架构的软件包,将{NPU_HOST_LIB}环境变量的路径指向AArch64架构的软件包安装目录(如下所示),便于使用与运行环境架构相同的软件包中的头文件来编译代码。
export NPU_HOST_LIB=$HOME/Ascend/ascend-toolkit/latest/ arm64-linux/runtime/lib64/stub
注意:
- 您可以登录对应的环境,执行uname -a命令查询其操作系统的架构。
- 如果不清楚“Ascend-cann-toolkit”包的安装路径,也可以使用find -name "filename"命令,查找libascendcl.so文件所在的路径,再配置环境变量。
若找不到libascendcl.so文件,则需要重新安装“Ascend-cann-toolkit”包。
当环境上安装多个软件版本时,请根据实际情况选择版本,其中,latest目录默认指向最后安装的软件版本。
当同一个版本下有多个libascendcl.so文件时,是由于兼容旧版本的原因,其中部分文件是软链接,方便用户在旧版本下编译应用源码。
- 当开发环境与运行环境的操作系统架构相同时,配置示例如下所示:
本页内容