编译和运行
- 编译代码。
- 以运行用户登录开发环境。
- 创建编译脚本CMakeLists.txt。
单击Gitee进入HiCAID开源仓,访问“HiCAID/OpenHiva/examples”目录,获取CMakeLists.txt示例文件。根据自身实际情况,修改编译脚本中头文件、库文件以及生成可执行文件的相关信息。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
# CMake lowest version requirement cmake_minimum_required(VERSION 3.5) # 设置工程名 project(community_test) # 设置编译选项 set_directory_properties(PROPERTIES COMPILE_OPTIONS "-std=c++11;-Wall;-Wextra") set(CMAKE_INSTALL_PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/output/) # 设置可执行文件名(如test_create_pub),指定应用*.cpp源文件所在目录 add_executable(test_create_pub src/test_create_pub.cpp) # 设置头文件目录 target_include_directories(test_create_pub PRIVATE /usr/local/Ascend/robotmiddleware/sdk/include/hiva/cm /usr/local/Ascend/robotmiddleware/sdk/include/hiva/cm/std_msgs/include/ ) # 设置链接的库文件目录和名称 target_link_directories(test_create_pub PRIVATE /usr/local/Ascend/robotmiddleware/sdk/lib/hiva/cm ) target_link_libraries(test_create_pub PRIVATE HivaOpen HivaTimer rostime c_sec ) # 可执行文件在CMakeLists文件所在目录的bin目录下 install(TARGETS test_create_pub RUNTIME DESTINATION bin OPTIONAL)
其中target_include_directories、target_link_directories、target_link_libraries字段所涉及的信息,可参考表1填写。
OpenHiva头文件在“Robot Middleware安装目录/robotmiddleware/sdk/include”目录下,OpenHiva库文件在“Robot Middleware安装目录/robotmiddleware/sdk/lib”目录下。
表1 头文件与库文件的对应关系表 定义接口的头文件
用途
编译时对应的库文件
hiva/cm/open/init.h
用于定义节点初始化、退出等接口。
hiva/cm/libHivaOpen.so
hiva/cm/open/node.h
用于节点node定义。
hiva/cm/open/publisher.h
用于定义Publisher相关接口。
hiva/cm/open/subscriber.h
用于定义Subscriber相关接口。
hiva/cm/open/topic_options.h
用于设置topic选项相关定义。
hiva/cm/open/qos_options.h
用于设置DDS QoS选项相关定义。
hiva/cm/open/service_client.h
客户端相关定义。
hiva/cm/open/service_server.h
服务端相关定义。
hiva/cm/open/service_options.h
服务选项配置。
hiva/cm/open/buffer_message.h
hiva/cm/open/hiva_buffer_pool.h
hiva/cm/open/hiva_buffer.h
HivaBuffer相关定义。
hiva/cm/std_msgs/include/HivaMessage.h
hiva/cm/std_msgs/include/BufferMessage.h
消息类型定义。
hiva/cm/console/hiva_error_code.h
框架的错误码。
hiva/cm/core/hiva_serializer.h
Hiva序列化定义,与消息类型配合使用。
hiva/cm/inner_topic/hiva_nn_topic.h
用于定义Hiva::CreateNnEngine接口。
hiva/cm/libHivaNnengine.so
hiva/cm/hiva_timer/timer.h
用于定义定时器相关的部分接口,例如Hiva::CreateTimer。
hiva/cm/libHivaTimer.so
hiva/cm/hiva_timer/wall_timer.h
用于定义定时器相关的部分接口,例如Hiva::CreateWallTimer。
hiva/cm/hiva_timer/steady_timer.h
用于定义定时器相关的部分接口,例如Hiva::CreateSteadyTimer。
hiva/cm/hiva_time/*_duration.h
hiva/cm/hiva_time/*_rate.h
hiva/cm/hiva_time/*_time.h
hiva/cm/hiva_time/steady_time.h
(*可以替换为hiva、wall、base,分别与duration、rate、time组合,有9个)
用于定义hiva time相关类型定义,如HivaTime、HivaRate等
hiva/cm/libHivaTime.so
hiva/cm/cfgmgr/param.h
用于定义CfgMgr子系统相关接口。
hiva/cm/libcfgmgr_client.so
hiva/cm/securec.h
hiva/cm/securectype.h
用于安全函数的编译打桩,解除对driver包的依赖。
hiva/cm/libc_sec.so
- 执行编译命令。
切换到应用程序(*.cpp)所在目录,执行cmake命令,示例如下。其中${cmake_path}代表CMakeLists.txt所在路径,$HOME/Ascend代表toolkit的安装路径,请根据实际情况替换。
cmake ${cmake_path} -DCMAKE_CXX_COMPILER=$HOME/Ascend/toolkit/toolchain/hcc/bin/aarch64-target-linux-gnu-g++
编译成功后,在编译脚本指定的目录下生成可执行文件。
- 运行应用。
以运行用户将开发环境上应用所在目录的所有子目录和子文件上传到运行环境,切换到可执行文件所在的目录,运行可执行文件。