示例如下:
include_directories( directoryPath1 directoryPath2 )
link_directories( directoryPath3 directoryPath4 )
示例如下:
add_executable(main directoryPath5 directoryPath6)
示例如下:
target_link_libraries(main ascendcl libName1 libName2)
编译基于AscendCL接口的代码逻辑时,请按照include的头文件依赖对应的库文件,如果引用多余的so文件(例如libascendcl.a),可能导致版本功能异常或后续版本升级时存在兼容性问题。
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "../../../out") install(TARGETS main DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
如果基于基于Caffe ResNet-50网络实现图片分类(同步推理)样例中的CMakeLists.txt编译脚本进行修改时,则需要设置DDK_PATH、NPU_HOST_LIB环境变量,分别用于指向AscendCL头文件目录、库文件目录。
如下为设置环境变量的示例,${INSTALL_DIR}表示CANN软件安装目录,例如,$HOME/Ascend/ascend-toolkit/latest,arch表示操作系统架构,{os}表示操作系统。
export DDK_PATH=${INSTALL_DIR} export NPU_HOST_LIB=${INSTALL_DIR}/{arch-os}/devlib
使用“${INSTALL_DIR}/{arch-os}/devlib”目录下的*.so库,是为了编译基于AscendCL接口的代码逻辑时,不依赖其它组件(例如Driver)的任何*.so库。因此在使用cmake编译命令时,请务必将DCMAKE_SKIP_RPATH设置为TRUE,代表不会将rpath路径(即“${INSTALL_DIR}/{arch-os}/devlib”)添加到编译生成的可执行文件中去。
编译通过后,运行应用时,通过配置环境变量,应用会链接到运行环境上“lib64”目录下的*.so库,运行时会自动链接到依赖其它组件的*.so库。
示例命令如下,其中,“../../../src”表示CMakeLists.txt文件所在的目录,请根据实际目录层级修改;通过-DCMAKE_CXX_COMPILER参数指定的编译器,请根据实际版本要求修改。
make
将AscendCL初始化配置文件(acl.json)所在的目录、可执行文件所在的目录、测试图片所在的目录、*.om文件所在的目录都上传到运行环境的同一个目录下,再登录到运行环境,切换到可执行文件所在的目录,运行可执行文件,示例命令如下:
./main
如果在AscendCL初始化阶段,在aclInit接口中传入空指针,则无需将AscendCL初始化配置文件(acl.json)所在的目录上传到运行环境。
运行应用时如果出错,您可以参见《日志参考》获取日志文件,以便查看日志文件中详细报错。根据报错初步定位后: