本文是在链接: 行为树 — [3] BehaviorTree.CPP在Windows下的使用(基于VSCode)基础上,列举一下本人踩过的几个坑,请阅读上文后阅读本文。
1. 安装mingw时需注意:
1.1 关于mingw的版本
mingw下载: 下载地址
mingw的版本是我踩坑最多的地方
1.1.1 最开始下载install.exe版本,但网络出现问题
1.1.2 下载x86_64-win32版本,出现了如下问题:
// 编译出错
error: 'mutex' in namespace 'std' does not name a type
原因是在mingw构建工具链的“线程模型:win32”中不支持互斥。您必须选择任何具有“线程模型:posix”的工具链
1.1.3 下载x86_64-posix-sjij版本,出现问题:
// 编译出错
'coroutine' was not declared in this scope
原因是x86_64版本不支持coroutine协程,我们需要下载dwarf版本,最后下载i686-posix-dwarf版本成功解决。
1.2 cmake编译问题
因为linux里mingw编译器是调用make.exe,所以我们要将mingw/bin中的mingw32-make.exe复制一份,重命名为make.exe
2 配置vscode时需注意
2.1 头文件配置
按照文章开头介绍的文章配置后,编译时会报错:
// 编译出错
"behaviortree_cpp_v3/bt_factory.h" no such file or derectory
首先我们需要在c_cpp_properties.json中找到参数 includePath ,将BehaviorTree.CPP中的include文件夹添加进路径
"includePath": [
"${workspaceFolder}/**",
"E:\\Experiment\\c\\BehaviorTree.CPP\\include"
],
网上大部分的教程到此为止,但依然出现gcc编译错误,后来查阅资料得知vscode中c_cpp_properties.json的"includePath"只是告诉vscode插件在哪里找到头文件,便于进行源码查看和debug,并没有告诉gcc编译器这个路径。
所以我们还需要在tasks.json文件,找到参数 args 添加:
"args": [
"-I",
"E:\\Experiment\\c\\BehaviorTree.CPP\\include"
],
指定头文件路径,成功解决。
2.2 reference配置
解决上述问题后出现如下错误:
E:/Experiment/c/main.cpp:42: undefined reference to `BT::BehaviorTreeFactory::BehaviorTreeFactory()'
在网上寻找原因,链接: 这篇文章解决了这个问题,编译器只编译了bt_factory.h,而没编译bt_factory.cpp,所以要再在task.json的 args 参数中添加:
"args": [
"-g",
"E:\\Experiment\\c\\BehaviorTree.CPP\\src\\*.cpp",
],
下面给出task.json中完整的args参数:
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"E:\\Experiment\\c\\BehaviorTree.CPP\\src\\*.cpp",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe",
"-I",
"E:\\Experiment\\c\\BehaviorTree.CPP\\include"
],
成功解决!
3 其他问题
3.1 cmake问题
因为我们使用cmake,所以需要添加c.code-workspace,参考链接: 这篇文章
我们需要注意c.code-workspace与.vscode应在同级目录下。