news 2026/5/12 3:58:49

保姆级教程:在Ubuntu 20.04上从源码编译BehaviorTree.CPP 3.5.4(附完整CMake配置)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
保姆级教程:在Ubuntu 20.04上从源码编译BehaviorTree.CPP 3.5.4(附完整CMake配置)

从零构建行为树开发环境:Ubuntu 20.04源码编译BehaviorTree.CPP全指南

当你第一次在GitHub上发现BehaviorTree.CPP这个强大的行为树框架时,可能会被它优雅的API设计和丰富的示例所吸引。但作为一个C++开发者,你很快会面临第一个现实问题:如何在自己的Ubuntu开发环境中正确编译这个库?本文将带你从零开始,用最稳妥的方式完成从源码编译到第一个示例运行的全过程。

1. 环境准备与依赖安装

在开始编译之前,我们需要确保系统具备所有必要的构建工具和依赖库。Ubuntu 20.04已经提供了大部分所需软件包,但版本选择至关重要。

首先更新你的软件包列表:

sudo apt update && sudo apt upgrade -y

1.1 安装基础编译工具链

BehaviorTree.CPP需要完整的C++开发环境,执行以下命令安装必备工具:

sudo apt install -y build-essential cmake git

验证CMake版本(至少需要3.13):

cmake --version

1.2 安装特定版本依赖库

BehaviorTree.CPP主要依赖Boost和ZeroMQ,以下是精确安装命令:

sudo apt install -y libboost-dev libboost-coroutine-dev libzmq3-dev

为确保版本兼容性,建议检查已安装的Boost版本:

dpkg -s libboost-dev | grep Version

提示:如果系统默认Boost版本低于1.59,建议通过PPA安装新版:

sudo add-apt-repository ppa:mhier/libboost-latest sudo apt update sudo apt install -y libboost1.71-dev

2. 获取源码与编译配置

2.1 克隆源代码仓库

建议直接从GitHub获取最新稳定版本:

git clone https://github.com/BehaviorTree/BehaviorTree.CPP.git cd BehaviorTree.CPP git checkout 3.5.4 # 指定版本

2.2 配置编译选项

创建构建目录并配置CMake:

mkdir build && cd build cmake .. \ -DBUILD_UNIT_TESTS=OFF \ -DBUILD_SHARED_LIBS=OFF \ -DCMAKE_BUILD_TYPE=Release

关键参数说明:

参数作用推荐值
BUILD_UNIT_TESTS禁用单元测试(避免额外依赖)OFF
BUILD_SHARED_LIBS生成静态库而非动态库OFF
CMAKE_BUILD_TYPE优化级别Release

2.3 执行编译

使用多核编译加速过程:

make -j$(nproc)

编译完成后,检查生成的静态库:

ls -lh lib/libbehaviortree_cpp_v3.a

3. 创建示例项目结构

现在我们来建立一个最小化的测试项目,验证库是否正常工作。项目目录结构如下:

my_bt_project/ ├── CMakeLists.txt ├── include/ # 从源码复制 ├── lib/ # 存放编译好的静态库 ├── sample_nodes/ # 从源码examples复制 └── src/ # 你的行为树代码

3.1 准备必要文件

从BehaviorTree.CPP源码中复制关键文件:

# 创建项目目录 mkdir -p my_bt_project/{include,lib,src,sample_nodes} # 复制头文件 cp -r BehaviorTree.CPP/include/* my_bt_project/include/ # 复制示例节点 cp -r BehaviorTree.CPP/examples/sample_nodes/* my_bt_project/sample_nodes/ # 复制静态库 cp BehaviorTree.CPP/build/lib/libbehaviortree_cpp_v3.a my_bt_project/lib/ # 复制示例代码 cp BehaviorTree.CPP/examples/t01_build_your_first_tree.cpp my_bt_project/src/

4. 编写CMakeLists.txt

这是整个过程中最具挑战性的部分。下面是一个经过优化的CMake配置:

cmake_minimum_required(VERSION 3.13) project(BehaviorTreeDemo) # 启用C++14标准 set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) # 查找依赖库 find_package(Boost 1.59 REQUIRED COMPONENTS coroutine system) find_package(Threads REQUIRED) # 设置包含路径 include_directories( ${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/sample_nodes ) # 源文件列表 set(SRC_FILES src/t01_build_your_first_tree.cpp sample_nodes/dummy_nodes.cpp ) # 链接库路径 link_directories(${CMAKE_SOURCE_DIR}/lib) # 创建可执行文件 add_executable(bt_demo ${SRC_FILES}) # 链接库 target_link_libraries(bt_demo PRIVATE behaviortree_cpp_v3 ${Boost_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} zmq )

注意:如果遇到链接错误,可能需要添加额外的库依赖:

target_link_libraries(bt_demo PRIVATE stdc++fs) # 对于C++17文件系统支持

5. 构建与测试

5.1 构建项目

mkdir build && cd build cmake .. && make

5.2 运行示例

成功构建后,运行生成的可执行文件:

./bt_demo

预期输出应显示行为树的执行流程:

[ Battery: OK ] [ GripperInterface: OPEN ] [ ApproachObject: STARTED ] -> [ ApproachObject: SUCCESS ] [ GripperInterface: CLOSE ] [ Battery: OK ]

6. 常见问题排查

6.1 Boost版本不匹配

症状:CMake报错找不到Boost 解决方案:

sudo apt install libboost-all-dev # 或指定版本 sudo apt install libboost1.71-dev

6.2 链接错误

症状:undefined reference to `BT::BehaviorTreeFactory::registerNodeType<>' 解决方案: 确保CMakeLists.txt中正确定义了MANUAL_STATIC_LINKING:

target_compile_definitions(bt_demo PRIVATE "MANUAL_STATIC_LINKING")

6.3 ZeroMQ相关问题

症状:运行时崩溃或链接错误 解决方案:

sudo apt install libzmq3-dev # 并在CMakeLists.txt中添加zmq到链接库

7. 进阶配置建议

7.1 使用动态链接库

如需生成动态库版本,修改CMake配置:

cmake .. -DBUILD_SHARED_LIBS=ON

对应的项目CMakeLists.txt也需要调整:

find_package(BehaviorTreeCPP 3.5 REQUIRED) target_link_libraries(bt_demo PRIVATE BehaviorTreeCPP::BehaviorTreeCPP)

7.2 集成到现有项目

将BehaviorTree.CPP作为子模块:

git submodule add https://github.com/BehaviorTree/BehaviorTree.CPP.git

然后在主CMakeLists.txt中添加:

add_subdirectory(BehaviorTree.CPP)

7.3 调试符号支持

开发时建议启用调试信息:

cmake .. -DCMAKE_BUILD_TYPE=Debug

在实际项目中,我发现最稳妥的做法是先将库编译为静态版本,确保核心功能正常工作后再考虑动态链接等优化方案。BehaviorTree.CPP的示例代码质量很高,建议从t01开始逐步测试更复杂的功能,这样能快速定位是编译问题还是逻辑问题。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/12 3:58:43

保姆级教程:用Python和NumPy手把手复现MIMO信道SVD分解与预编码(附代码)

从零实现MIMO信道SVD分解与预编码&#xff1a;Python实战指南 在无线通信系统中&#xff0c;多输入多输出(MIMO)技术通过利用空间维度显著提升了信道容量和可靠性。而奇异值分解(SVD)作为MIMO信道处理的核心数学工具&#xff0c;能够将复杂信道解耦为多个独立并行子信道。本文将…

作者头像 李华
网站建设 2026/5/12 3:57:34

大型机场U型机坪推出等待点运行优化【附案例】

✨ 长期致力于机场、U型机坪区、推出等待点、运行程序优化、启发式算法研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅如需沟通交流&#xff0c;点击《获取方式》 &#xff08;1&#xff09;单通道U型机坪推出等待点位优化…

作者头像 李华
网站建设 2026/5/12 3:50:18

Pretticlaw:AI应用开发的工作流编排与生产部署平台

1. 项目概述&#xff1a;一个面向AI应用开发的“瑞士军刀”最近在开源社区里&#xff0c;PrettiFlow 团队放出的pretticlaw项目引起了我的注意。乍一看这个名字&#xff0c;结合其官方描述&#xff0c;它定位为“一个用于构建和部署AI应用的开源平台”。这听起来似乎又是一个“…

作者头像 李华
网站建设 2026/5/12 3:50:18

AI发展速度惊人,普通人如何抓住时代红利?内含低门槛入局指南!

新版豆包AI 2.0 lite升级后支持视频、图像、音频、文本的原生统一理解&#xff0c;能力大幅提升&#xff0c;能解决复杂业务问题。整个AI行业都在加速发展&#xff0c;不跟上节奏将被淘汰。AI行业爆火带来更多机遇&#xff0c;即使不懂编程也有低门槛岗位如AI大模型应用开发工程…

作者头像 李华
网站建设 2026/5/12 3:49:00

从零构建高性能自定义光标框架:原理、实现与插件化设计

1. 项目概述&#xff1a;一个为开发者量身定制的光标框架最近在折腾一个前端项目&#xff0c;需要实现一套高度定制化的光标交互效果&#xff0c;比如鼠标悬停在不同类型的元素上时&#xff0c;光标能平滑地变形、变色&#xff0c;甚至带动画反馈。找了一圈&#xff0c;现有的库…

作者头像 李华