如何在cpp文件ROS中查找头路径

Posted

技术标签:

【中文标题】如何在cpp文件ROS中查找头路径【英文标题】:How to find a header path in a cpp file ROS 【发布时间】:2019-04-07 03:47:37 【问题描述】:

我正在学习如何在 ros 中编程。对我来说,第一个困难是头文件。我想阅读原始代码,但问题是它们在哪里?如何找到这些头文件?

我在当前路径中尝试过gcc -H xx.cpp,但它只是向我展示了一些无关紧要的答案。例如,我对 ros.h 感兴趣,而不是 string。对于 ros.h,它告诉我

fatal error: ros/ros.h: No such file or directory compilation terminated. 

我现在不知道。

dale@dale-Aspire-EC-471G:~/Compile/src/learningros/chapter8_tutorials/src$ gcc -H tf_broadcaster.cpp 
tf_broadcaster.cpp:1:21: fatal error: ros/ros.h: No such file or directory
compilation terminated.

dale@dale-Aspire-EC-471G:~/Compile/src/learningros/chapter8_tutorials/src$ gcc -H odometry.cpp 
. /usr/include/c++/5/string
.. /usr/include/x86_64-linux-gnu/c++/5/bits/c++config.h
... /usr/include/x86_64-linux-gnu/c++/5/bits/os_defines.h
.... /usr/include/features.h
..... /usr/include/x86_64-linux-gnu/sys/cdefs.h
...... /usr/include/x86_64-linux-gnu/bits/wordsize.h
..... /usr/include/x86_64-linux-gnu/gnu/stubs.h
...... /usr/include/x86_64-linux-gnu/gnu/stubs-64.h
..............
........ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h
........ /usr/include/x86_64-linux-gnu/bits/time.h
......... /usr/include/x86_64-linux-gnu/bits/timex.h
....... /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h
........ /usr/include/x86_64-linux-gnu/bits/wordsize.h
....... /usr/include/x86_64-linux-gnu/bits/setjmp.h
........ /usr/include/x86_64-linux-gnu/bits/wordsize.h
....... /usr/include/x86_64-linux-gnu/bits/wordsize.h
.... /usr/include/x86_64-linux-gnu/c++/5/bits/atomic_word.h
... /usr/include/c++/5/ext/alloc_traits.h
.. /usr/include/c++/5/bits/basic_string.tcc
odometry.cpp:2:21: fatal error: ros/ros.h: No such file or directory
compilation terminated.

我希望找到一种有效的方法来找到我想知道的 cpp 文件中的标头。希望你能帮助我或给我一些建议。

【问题讨论】:

检查环境变量ROS_ROOT。这应该是ros的安装路径:wiki.ros.org/ROS/EnvironmentVariables 【参考方案1】:

gcc -H odometry.cpp 命令将列出 gcc 正在搜索头文件的所有路径。由于上一个命令给出了一个错误,说它找不到此标头,因此此列表将不包含该位置,否则上一个命令会找到 ros/ros.h 并且不会产生该错误。

这些头文件在标准 ROS 安装中的位置是:

/opt/ros/<distribution_name>/include

如果您已运行设置脚本source /opt/ros/&lt;distribution_name&gt;/setup.bash 或将其包含在您的.bashrc 脚本中,则会自动为您设置这些头文件的路径。

希望这会有所帮助。

【讨论】:

呃,但是我已经在 ~/.bashrc 中添加了“source /opt/ros/kinetic/setup.bash”,因为我学习了 ros 并且运行这些 cpp 文件时不会出错.其实我更关注如何在ros中找到header。

以上是关于如何在cpp文件ROS中查找头路径的主要内容,如果未能解决你的问题,请参考以下文章

ros中获取包路径

ros中获取包路径

catkin / ROS:如何在使用子模块时正确指定包含路径

如何在 CMakeLists 中包含库头文件

VScode配置ROS1/2开发环境.cpp头文件缺少问题解决

如何指定GCC的默认头文件路径