1、問題描述
在ROS2工程中,編譯使用Qt實現的庫,在其它ROS2包鏈接該庫時,報錯:
/usr/bin/ld: XXX undefined reference to `vtable for
2、原因分析
查看鏈接失敗的幾個函數接口都是,信號函數(signals 標記的函數)。因為信號函數都只有定義,沒有實現,在執行ROS2 colcon build 時,沒有對信號函數做元編譯(moc)處理,所以在使用到該信號函數時,就會報錯。
colcon build 編譯時,為什么沒有對信號函數做元編譯(moc)處理呢?
查看 CMakeLists.txt ,發現 add_library 函數只使用源文件,沒有指定頭文件
add_library(laoer_library ${SOURCES})
而元編譯(moc)處理需要檢索頭文件中的 Q_OBJECT、signals、slots等關鍵詞。
3、解決方法
1)使用Qt相關編譯器
set(CMAKE_AUTOUIC ON)
set(CMAKE