Ich habe ein relativ einfaches Qt 5.0-Projekt bekommt die CMake 2.8.9 verwendet:Warum bekomme ich "undefinierte Referenz auf vtable ..." Fehler beim Verknüpfen dieser Qt 5.0-Anwendung?
CMakeLists.txt:
cmake_minimum_required(VERSION 2.8.9)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
project(hello-world)
find_package(Qt5Widgets REQUIRED)
qt5_wrap_ui(hello-world_UI MainWindow.ui)
add_executable(hello-world MainWindow.cpp main.cpp ${hello-world_UI})
qt5_use_modules(hello-world Widgets)
MainWindow.h:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow();
virtual ~MainWindow();
private:
Ui::MainWindow * const ui;
};
#endif // CMAINWINDOW_H
mainwindow.cpp:
#include "MainWindow.h"
#include "ui_MainWindow.h"
MainWindow::MainWindow()
: ui(new Ui::MainWindow)
{
}
MainWindow::~MainWindow()
{
delete ui;
}
main.cpp:
Das Projekt enthält auch eine .ui
Datei, die mit Qt Creator 2.6.1 (MainWindow.ui) erstellt wurde.
Wenn ich versuche, die Datei mit g++
auf Linux zu bauen, erhalte ich folgende Fehler:
CMakeFiles/hello-world.dir/MainWindow.cpp.o: In function `MainWindow::MainWindow()': MainWindow.cpp:(.text+0x3b): undefined reference to `vtable for MainWindow' MainWindow.cpp:(.text+0x4d): undefined reference to `vtable for MainWindow' CMakeFiles/hello-world.dir/MainWindow.cpp.o: In function `MainWindow::~MainWindow()': MainWindow.cpp:(.text+0xaf): undefined reference to `vtable for MainWindow' MainWindow.cpp:(.text+0xc1): undefined reference to `vtable for MainWindow' collect2: error: ld returned 1 exit status
Was möglicherweise diese Art von Fehler verursachen könnte? Ich bin vor kurzem von qmake
zu CMake gewechselt und ich erinnere mich nie daran, in so viele Schwierigkeiten zu geraten, ein kleines Beispiel zu kompilieren. Was mache ich falsch?
Edit: hier ist der Befehl verwendet wird, alles zu verknüpfen:
/usr/bin/c++ CMakeFiles/hello-world.dir/MainWindow.cpp.o CMakeFiles/hello-world.dir/main.cpp.o -o hello-world -rdynamic /usr/local/Qt-5.0.0/lib/libQt5Widgets.so.5.0.0 /usr/local/Qt-5.0.0/lib/libQt5Gui.so.5.0.0 /usr/local/Qt-5.0.0/lib/libQt5Core.so.5.0.0 -Wl,-rpath,/usr/local/Qt-5.0.0/lib
Ich habe gesetzt (CMAKE_AUTOMOC ON), aber ich sehe immer noch den gleichen Fehler, wie Sie gesehen haben. Außerdem ist mein Link-Befehl der gleiche wie Ihr. Können Sie bitte helfen? –
Auch die Moc-Datei "nova_app_automoc.cpp "für das Ziel generiert" nova_app "hat das drin:/* Diese Datei wird automatisch generiert, nicht bearbeiten */ enum some_compilers {need_more_than_nothing}; –
Ich habe fast genau das selbe Problem, aber ich habe gesetzt (CMAKE_AUTOMOC ON) schon in meiner CMakeLists.txt und trotzdem bekomme ich das Problem !! –