CMake2.8.9を使用する比較的単純なQt5.0プロジェクトがあります。
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:
#include <QApplication>
#include "MainWindow.h"
int main(int argc, char * argv[])
{
QApplication app(argc, argv);
MainWindow win;
win.show();
return app.exec();
}
プロジェクトには、.ui
Qt Creator 2.6.1(MainWindow.ui)で作成されたファイルも含まれています。
Linuxでファイルをビルドしようとするとg++
、次のエラーが発生します。
CMakeFiles / hello-world.dir / MainWindow.cpp.o:関数 `MainWindow :: MainWindow()'内: MainWindow.cpp:(。text + 0x3b): `vtableforMainWindow'への未定義の参照 MainWindow.cpp:(。text + 0x4d): `vtableforMainWindow'への未定義の参照 CMakeFiles / hello-world.dir / MainWindow.cpp.o:関数 `MainWindow ::〜MainWindow()'内: MainWindow.cpp:(。text + 0xaf): `vtableforMainWindow'への未定義の参照 MainWindow.cpp:(。text + 0xc1): `vtableforMainWindow'への未定義の参照 collect2:エラー:ldが1つの終了ステータスを返しました
この種のエラーの原因は何でしょうか?私は最近CMakeに切り替えましqmake
たが、簡単な例をコンパイルするのにこれほど多くの問題が発生したことを覚えていません。私は何が間違っているのですか?
編集:これがすべてをリンクするために使用されているコマンドです:
/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