ROS功能包编译报错fatal error: xxxxConfig.h: 没有那个文件或目录的解决方法及原理介绍

news2024/10/5 21:48:41

   在ROS中,我们常使用动态调参工具或参数配置文件来进行参数调节,在编译时会生成对应的Config.h文件,如本文例子中的MPCPlannerConfig.h文件

   一、报错原因及解决方法

   在编译时报以下错误的原因是在编译生成可执行文件mpc_ros的过程中需要使用MPCPlannerConfig.h文件,而此时MPCPlannerConfig.h还没有生成。

In file included from /home/gly/catkin_ws/src/local_planner_plugin/mpc_ros-melodic/mpc_ros/src/mpc_plannner_ros.cpp:17:
/home/gly/catkin_ws/src/local_planner_plugin/mpc_ros-melodic/mpc_ros/include/mpc_plannner_ros.h:41:10: fatal error: mpc_ros/MPCPlannerConfig.h: 没有那个文件或目录
   41 | #include <mpc_ros/MPCPlannerConfig.h>
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.

在这里插入图片描述

   所以,对该功能包的修改CMakeLists.txt文件进行修改,指定编译顺序,在生成mpc_ros文件前,先生成其所需要的文件即可,具体的解决方法如下:

   ① 根据报错信息,找出是那个可执行文件编译过程中缺失了所需文件

   本文的例子中,从报错信息中容易知道是编译mpc_plannner_ros.cpp时报的错

   ②打开本功能包中的CMakeLists.txt文件,并找到上一步中找到的文件的编译语句

   本文的例子中,CMakeLists.txt文件中mpc_plannner_ros.cpp的编译语句如下:

add_library(mpc_ros src/mpc_plannner_ros.cpp src/mpc_plannner.cpp)
TARGET_LINK_LIBRARIES(mpc_ros ipopt ${catkin_LIBRARIES} )

   ③在上一步找到的编译语句后面,添加指定catkin_make编译顺序的指令

add_dependencies( 编译生成的可执行文件名 ${${PROJECT_NAME}_EXPORTED_TARGETS})

   本文的例子中,mpc_plannner_ros.cpp编译生成的可执行文件名为mpc_ros,所以添加的语句为:

add_dependencies(mpc_ros ${${PROJECT_NAME}_EXPORTED_TARGETS})

   如下图所示:
在这里插入图片描述


   二、相关编译指令原理介绍

   1.、add_library

add_library(mpc_ros src/mpc_plannner_ros.cpp src/mpc_plannner.cpp)

   - 作用:这个指令的作用是创建一个共享库(shared library)称为 mpc_ros,并将指定的源文件 mpc_planner_ros.cppmpc_planner.cpp 编译成库。这个库可以在其他项目中被链接和使用。

   - 原理:在CMake项目中,add_library 用于定义和创建一个库。它会将指定的源文件编译成目标库,使得其他项目可以链接该库来使用其中定义的函数和类。在这个特定的例子中,两个源文件 mpc_planner_ros.cppmpc_planner.cpp 将被编译成 mpc_ros 这个库。通常,这个库将包含用于运动规划(可能是模型预测控制,MPC)的功能代码,使得其他ROS节点或C++应用程序可以重用这些功能。

   2、TARGET_LINK_LIBRARIES

TARGET_LINK_LIBRARIES(mpc_ros ipopt ${catkin_LIBRARIES} )

   - 作用:这个指令用于指定链接目标库 mpc_ros 到其他库,包括 ipoptcatkin_LIBRARIES。这是为了确保在编译和链接过程中,mpc_ros 能够访问这些库的功能和符号。

   - 原理:在CMake中,TARGET_LINK_LIBRARIES 用于将目标库与其他库进行链接。在这里,mpc_ros 库将与 ipoptcatkin_LIBRARIES 进行链接,这使得 mpc_ros 可以使用这些库提供的功能。ipopt 通常是一个优化库,而 catkin_LIBRARIES 是与ROS相关的库集合,其中包括ROS核心库和其他可能需要的ROS库。这些库的链接将允许 mpc_ros 在运行时调用它们的函数和符号。

   3、add_dependencies

add_dependencies(mpc_ros ${${PROJECT_NAME}_EXPORTED_TARGETS})

   - 作用:这个指令指定了 mpc_ros 库的依赖关系,以确保在构建项目时,mpc_ros 会在 ${PROJECT_NAME}_EXPORTED_TARGETS 目标之前被构建。

   - 原理:在CMake中,add_dependencies 用于定义构建目标之间的依赖关系。在这个特定的情况下,mpc_ros 库依赖于 ${PROJECT_NAME}_EXPORTED_TARGETS 目标。这意味着在构建项目时,CMake 将确保先构建 ${PROJECT_NAME}_EXPORTED_TARGETS,然后才构建 mpc_ros。通常,${PROJECT_NAME}_EXPORTED_TARGETS 包括了需要在 mpc_ros 使用的其他目标,例如ROS节点或其他库,以确保这些目标已经构建完成并且可用。


   这些指令的目的是协助构建ROS项目中的库,以便它们能够被其他项目正确链接和使用所需的依赖项。这有助于管理复杂的ROS工程和C++工程的构建过程,并确保各个部分正确协作。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1118648.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【(数据结构)—— 基于单链表实现通讯录】

&#xff08;数据结构&#xff09;—— 基于单链表实现通讯录 一.通讯录的功能介绍1.基于单链表实现通讯录(1). 知识要求(2). 功能要求 二.通讯录的代码实现1.通讯录的底层结构(单链表)(1).思路展示(2).底层代码实现(单链表)1.单链表头文件 —— &#xff08;函数的定义&#x…

国旗升降系统程序及原理图资料

本文主要介绍国旗升降系统设计程序及原理图&#xff08;完整资料见文末链接&#xff09; 系统原理图如下&#xff0c;程序资料见文末 附完整资料链接 百度网盘链接: https://pan.baidu.com/s/1Q5J2J8LgVJ-hoeTSVP95_g?pwd3qkw 提取码: 3qkw

TypeScript 安装

TypeScript 的安装 在电脑上全局安装typescript 在确保电脑上已经安装了node.js的前提下&#xff0c;使用npm工具进行安装。 执行如下命令即可&#xff1a; (执行成功会&#xff0c;会安装当前发布的最新版本的typescript) npm install -g typescript如果是Linux or Mac 系统&…

2023年“绿盟杯”四川省大学生信息安全技术大赛

findme 下载附件打开无法正常显示 使用010editor打开发现CRC报错&#xff0c;很可能是高度被修改了 使用工具爆破图片正确的宽度和高度 这里工具自动修复的依旧不能正常打开显示 我们先对原来图片的高度进行修改 之后再使用工具进行修复&#xff0c;即可正常显示&#xff0c;…

JavaScript基础知识15——专业术语:语句和表达式

哈喽&#xff0c;大家好&#xff0c;我是雷工。 今天看到了JavaScript中的专业术语&#xff1a;语句和表达式&#xff0c;以下为学习笔记。 1、表达式概念&#xff1a; 表达式是可以被求值的代码&#xff0c;JavaScript引擎会将其计算出一个具体的结果。 示例&#xff1a; a…

数字图书馆和智慧图书馆区别

数字图书馆和智慧图书馆都是现代图书馆的发展趋势&#xff0c;但它们有以下区别&#xff1a; 1. 数字图书馆&#xff1a;是指将传统图书馆的资源、服务和技术经过数字化处理&#xff0c;以电子化形式进行保存、管理和利用的现代图书馆。数字图书馆主要集中在数字化内容的建设和…

【网络】HTTPS讲解(侧重于加密、秘钥、证书的讲解)

HTTPS讲解 前言正式开始安全HTTP和HTTPS的关系什么是加密和解密为什么要加密运营商劫持中间人 常⻅的加密⽅式对称加密⾮对称加密 数据摘要数字签名HTTPS 的⼯作过程⽅案 1 - 只使⽤对称加密&#xff08;不可靠&#xff09;⽅案 2 - 只使⽤⾮对称加密&#xff08;不可靠&#x…

JavaWeb——IDEA相关配置(Maven配置以及创建自己的第一个Maven项目)

写在前面&#xff1a; 笔者根据狂神说的javaweb视频&#xff0c;一步一步跟着配置IDEA中的Maven&#xff0c;在后面&#xff0c;笔者将讲述自己如何从0配置Maven以及创建自己的第一个Maven项目&#xff0c;笔者将自己的心路历程&#xff0c;包括配置的过程&#xff0c;都以文字…

二进制明文字符串加密:实现原理

二进制明文字符串加密:实现原理 背景 这里就不多做解释了&#xff0c;明文字符串暴露就是最好的逆向分析指引。无论是恶意攻击样本还是有一定安全需求的组件&#xff0c;直接暴露程序中的明文字符串会大幅降低外部的分析成本。所以需要在编译出的二进制中隐藏字符串。不过需要…

大数据技术学习笔记(二)—— Hadoop运行环境的搭建

目录 1 模版虚拟机准备1.1 修改主机名1.2 修改hosts文件1.3 修改IP地址1.3.1 查看网络IP和网关1.3.2 修改IP地址 1.4 关闭防火墙1.5 创建普通用户1.6 创建所需目录1.7 卸载虚拟机自带的open JDK1.8 重启虚拟机 2 克隆虚拟机3 在hadoop101上安装JDK3.1 传输安装包并解压3.2 配置…

最详细STM32,cubeMX外部中断

这篇文章将详细介绍 cubeMX外部中断的配置&#xff0c;实现过程。 文章目录 前言一、外部中断的基础知识。二、cubeMX 配置外部中断三、自动生成的代码解析四、代码实现。总结 前言 实验开发板&#xff1a;STM32F103C8T6。所需软件&#xff1a;keil5 &#xff0c; cubeMX 。实…

16 Transformer 的编码器(Encodes)——我在做更优秀的词向量

博客配套视频链接: https://space.bilibili.com/383551518?spm_id_from=333.1007.0.0 b 站直接看 配套 github 链接:https://github.com/nickchen121/Pre-training-language-model 配套博客链接:https://www.cnblogs.com/nickchen121/p/15105048.html Transformer 框架 seq…

解决osg绘制场景时因Z冲突导致重影或闪烁等不正常情况

目录 1. 问题的提出 2. Z冲突&#xff08;z-fighting&#xff09;简介 2.1. Z冲突&#xff08;z-fighting&#xff09;产生的原因 2.2. 如何消除Z冲突&#xff08;z-fighting&#xff09; 3. 代码实现 1. 问题的提出 今天绘制了一个棋盘格&#xff0c;鼠标在棋盘格上单击…

基于springboot实现学生综合测评系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现学生综合测评系统演示 摘要 随着信息化时代的到来&#xff0c;管理系统都趋向于智能化、系统化&#xff0c;学生综合测评系统也不例外&#xff0c;但目前国内仍都使用人工管理&#xff0c;学校规模越来越大&#xff0c;同时信息量也越来越庞大&#xff0c;人…

基于Android系统PJSIP库植入g729编码

基于Android系统PJSIP库植入g729编码 前言操作步骤1.从仓库下载最新的 PJSIP。3.将你的PJSIP项目中的所有文件作为给定补丁中的目录。4.按照 pjproject-2.5.diff 的说明应用更改。5.构建。 前言 有时候由于工作的需求&#xff0c;我们需要基于Android系统的PJSIP库支持G.729编…

微信小程序三种授权登录以及授权登录流程讲解

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《微信小程序开发实战》。&#x1f3af;&#x1f3a…

链表专题回顾

移除链表元素 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 /*** Definition for singly-linked list.//注意基本的链表定义方法* public class ListNode {* int val;* List…

【C++】stackqueue

适配器是一种设计模式 &#xff0c; 该种模式是将一个类的接口转换成客户希望的另外一个接口 。 虽然 stack 和 queue 中也可以存放元素&#xff0c;但在 STL 中并没有将其划分在容器的行列&#xff0c;而是将其称为 容器适配 器 &#xff0c;这是因为 stack 和队列只是对其他容…

系统架构之微服务架构

微服务架构 一.传统的单体架构与微服务架构的区别1.1 单体架构1.1.1 优点1.1.2 缺点 1.2 微服务架构1.2.1 优点1.2.2 面临的问题与挑战 二. 微服务架构模式方案2.1 聚合器微服务2.2 链式微服务2.3 数据共享微服务2.4 异步消息传递微服务 三. SOA与微服务的区别 微服务&#xff…

【数据分享】2022年我国30米分辨率的山体阴影数据(免费获取)

地形数据&#xff0c;也叫DEM数据&#xff0c;是我们在各项研究中最常使用的数据之一。之前我们分享过2022年哥白尼30米分辨率的DEM数据&#xff0c;该数据被公认为是全球最佳的开源DEM数据之一&#xff0c;甚至没有之一&#xff01;基于该数据我们处理得到2022年30米分辨率的坡…