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