Why am I getting "undefined reference to vtable..." errors when linking this Qt 5.0 application?

Turns out I forgot:

set(CMAKE_AUTOMOC ON)

At the top of the CMakeLists.txt file.


I struggled with this for a long time using all the hints published here:

http://doc.qt.io/qt-5/cmake-manual.html

And here

https://www.kdab.com/using-cmake-with-qt-5/

What I had to do was specify things in the right order. For example, the following is the top of my CMakeLists.txt. Note that the two CMAKE set directives come before add_executable. Once I did this, I was able to link without undefined symbols and vtable references. I just thought I'd post this for the benefit of others.

cmake_minimum_required (VERSION 2.8)

set (CMAKE_AUTOMOC ON)
set (CMAKE_INCLUDE_CURRENT_DIR ON)
add_executable(FHSpectrumSensor wideband_seq_spectrum_sensor.cpp sensor.cpp   gui.cpp ${gui_SRC})

Later in the CMakeLists.txt I have the following:

 find_package(Qt5Widgets REQUIRED)
 find_package(Qt5Charts REQUIRED)
 find_package(Qt5Core REQUIRED)

 qt5_use_modules(FHSpectrumSensor Widgets Charts)
 qt5_wrap_cpp(gui_SRC gui.h gui.cpp)

That did the trick.

Tags:

Qt

Cmake

Qt5