大家好,在某些地方include同個頭文件,但編譯器找不到的問題
環境: Cartographer SLAM 在 Ubuntu 20 (已安裝好ROS)下 編譯的問題
語言:C++
簡化過後的名稱,將名稱改為ABC
A.cc 包含了 C.h 頭文件
#include "cartographer/mapping/internal/2d/C.h"
並在終端上輸入
catkin_make_isolated
編譯起來沒問題。
接下來我在
文件:B.h 內,包含了頭文件 " C.h ",然後再編譯一次就會報錯
#include "cartographer/mapping/internal/2d/C.h"
另外我查了一下 CmakeLists.txt 的配置:
file(GLOB_RECURSE ALL_LIBRARY_HDRS "cartographer/*.h")
GLOB_RECURSE:以遞迴的方式將 "cartographer" 文件內的所有 .h 結尾的文件加為 標頭檔 ALL_LIBRARY_HDRS
我也將 ALL_LIBRARY_HDRS 印出來看,發現確實在編譯時編譯器有找到 " C.h "這個頭文件
但最後編譯器還是報錯。
可能原因:我在想是不是因為這兩個文件的路徑不同的原因,
所以A文件在 cartographer/mapping/internal/ 下,
而 B文件在 cartographer/mapping/ 下
後來我搜了一下,發現有五個在不同資料夾下的文件皆 include了 " C.h "
編譯皆沒問題,所以我認為不是因為不同地方include C.h 導致編譯器找不到。
以上是我目前找到的問題跟大致思路,有不詳細的地方我再補充,請問是哪裡出錯?
謝謝大家。
两个路径明明差了一个2d路径啊
你这个不是同一个头文件吧?
另外,头文件可以不用这么复杂,在Makefile 中的编译选项中添加上include 的路径,这样避免你引用的时候漏掉什么内容