【2023 · CANN训练营第一季】——编译时找不到头文件,找不到库文件,怎么办???

前言:训练营提供的镜像已经帮开发者设置好了开发环境,运行sample仓代码,一般不会遇到编译运行的问题,但我们进行实际应用开发时,还是会碰到诸如:找不到头文件、链接不到动态库等错误。遇到这种情况,不用着急,这些基本上都是和环境变量配置有关。解决这类问题,分三步走:1)确定报错文件的实际路径;2)查看CMakefiles.txt里关于头文件、库文件的路径设置;3)确认环境变量,如有必要修改环境变量。本文将结合sample仓的实例展开描述。写这篇笔记,是因为训练营的小伙伴在实际使用中出现了这个问题,然后和两位小伙伴一起讨论并解决了问题,很感谢训练营给开发者提供了一个共同交流和提高的平台,也感谢一起讨论的两位小伙伴!

        针对编译找不到头文件和库文件,昇腾官方文档对此有专门的描述:

文档首页>CANN社区版>6.3.RC1.alpha002>推理应用开发>应用开发(C&C++)>FAQ>编译运行应用样例报错,提示找不到头文件或库文件

https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/63RC1alpha002/infacldevg/aclcppdevg/aclcppdevg_000203.html


        这种通常是由于环境变量没有设置或者是设置不正确导致的。遇到这样的问题,我们应该怎样去解决,以及背后的原理是什么呢?

        下面,以华为昇腾官方sample仓“https://gitee.com/ascend/samples”中的例程为例,进行说明如何定位解决编译中出现的问题。

一、问题重现及解决方法

        具体选用的工程:

\samples\cplusplus\level2_simple_inference\1_classification\resnet50_imagenet_classification

        浏览ReadMe发现,发现进行工程编译、运行前,需要进行DDK_PATH和NPU_HOST_LIB这两个环境变量的设置。


一)帮编译器找到“acl.h”

    那看一下,不设置环境变量会发生什么呢?是的,会报错,找不到alc.h这个头文件。


        1、设置DDK_PATH环境变量

        我们把环境变量DDK_PATH这个环境变量设置好,看看会怎样?


        2、重新执行CMAKE和Make编译

 
        此时,找不到“acl.h”的问题已经不报了,说明找不到头文件的错误已经解决了。报的是找不到库文件lascendcl,显然这是和另一个环境变量有关了。

        下面,继续解决下一个问题,链接时找不到库的错误。

二)帮编译器找到“lascendcl”库

        1、设置环境变量NPU_HOST_LIB


        2、重新执行CMAKE和Make编译


        编译成功,大功告成!        

二、技术分析

        解决这类问题,通常分三步走:1)确定报错文件的实际路径;2)查看CMakefiles.txt里关于头文件、库文件的路径设置;3)确认环境变量,如有必要修改环境变量。下面,就按这三个不走,做一个技术分析。

一)确定报错文件的实际路径

        本例中找不到的文件都是属于CANN的,因此我们还需要了解CANN的tool-kit的安装路径和目录结构:

        1、CANN的安装路径:通常情况下,在安装时不指定的安装路径的情况下,路径如下:


        训练营镜像的安装用户是HwHiAiUser,CANN的安装路径是:

/home/HwHiAiUser/Ascend/ascend-toolkit

        具体安装参考用户手册的“安装开发环境”章节内容。

        2、训练营镜像,CANN头文件的路径是:/home/HwHiAiUser/Ascend/ascend-toolkit/latest/include


        3、训练营镜像,CANN库文件的路径是:/home/HwHiAiUser/Ascend/ascend-toolkit/latest/runtime/lib64/stub


         4、如果我们不熟悉CANN的目录结构,还可以使用find +文件名的方式,查找文件的实际路径。


二)查看CMakefiles.txt里关于头文件、库文件的路径设置

        我们来看一下,为什么头文件、链接库的路径是怎么和这两个环境变量关联上的。当我们打开“CMakeLists.txt”文件,会看见下图的字样。这样就将“头文件”、“链接库”的路径设置成上述两个环境变量的值。


        CMakefiles.txt是用来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件。设置好环境变量后,需要重新运行一次CMAKE,重新生成makefile文件,将正确的头文件和库文件的路径包含进去。  

三)检查环境变量,如有必要修改环境变量

        1、用echo 检查环境变量

        这个步骤主要会用到Linux的echo $环境变量名,来检查环境变量的值。这里需要特别注意的是,经常会由于由于粗心,把路径敲错了,比如:路径里多一个“/”,少一个“/”啥的。为了万无一失,将路径拷贝下来,然后通过cd 命令,进入目录,确认路径是否正确。

        2、设置环境变量的两种方法        

        我们可以使用export命令,临时设置环境变量,具体方法见上文的实际操作。这种方法在退出终端后,环境变量会失效。

        也可以将export设置环境变量的指令,写到~/.bashrc里,这样用户登录时,就自动完成了环境变量的设置。

 

  • 8
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值