【问题标题】:Qt5 with CMake - vtable error while AUTOMOC is ON带有 CMake 的 Qt5 - AUTOMOC 开启时出现 vtable 错误
【发布时间】:2016-09-08 20:11:15
【问题描述】:

我正在尝试使用 CMake 运行 Qt5 教程的简单计算器示例。我得到的错误是

[ 25%] Automatic moc and uic for target calculator
[ 25%] Built target calculator_automoc
Scanning dependencies of target calculator
[ 50%] Building CXX object CMakeFiles/calculator.dir/main.cpp.o
[ 75%] Linking CXX executable calculator
CMakeFiles/calculator.dir/main.cpp.o: In function `main':
main.cpp:(.text+0x45): undefined reference to `Calculator::Calculator(QWidget*)'
CMakeFiles/calculator.dir/main.cpp.o: In function `Calculator::~Calculator()':
main.cpp:(.text._ZN10CalculatorD2Ev[_ZN10CalculatorD5Ev]+0xf): undefined reference to `vtable for Calculator'
main.cpp:(.text._ZN10CalculatorD2Ev[_ZN10CalculatorD5Ev]+0x21): undefined reference to `vtable for Calculator'
collect2: error: ld returned 1 exit status
CMakeFiles/calculator.dir/build.make:123: recipe for target 'calculator' failed
make[3]: *** [calculator] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/calculator.dir/all' failed
make[2]: *** [CMakeFiles/calculator.dir/all] Error 2
CMakeFiles/Makefile2:79: recipe for target 'CMakeFiles/calculator.dir/rule' failed
make[1]: *** [CMakeFiles/calculator.dir/rule] Error 2
Makefile:118: recipe for target 'calculator' failed
make: *** [calculator] Error 2

然后我找到了this 并将 CMAKE_AUTOMOC 设置为 ON,但它没有帮助。这似乎是一个基本的 CMakeLists.txt 错误,但我几天都无法克服。

这是我的文件:

CMakeLists.txt

cmake_minimum_required(VERSION 2.8.11)

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
# Find includes in corresponding build directories
set(CMAKE_INCLUDE_CURRENT_DIR ON)
# Tell CMake to create the calculator executable
add_executable(calculator main.cpp)

project(calculator)

SET(CMAKE_PREFIX_PATH $ENV{HOME}/software/Qt5.7.0/5.7/gcc_64)

# Find the QtWidgets library
find_package(Qt5Widgets)

# Use the Widgets module from Qt 5.
target_link_libraries(calculator Qt5::Widgets)

main.cpp

 #include <QApplication>    
 #include "calculator.h"

 int main(int argc, char *argv[])
 {
     QApplication app(argc, argv);
     Calculator calc;

     calc.show();
     return app.exec();
 }

计算器.h

 #ifndef CALCULATOR_H
 #define CALCULATOR_H    
 #include <QWidget>

 class Calculator : public QWidget
 {
     Q_OBJECT

 public:
     Calculator(QWidget *parent = 0);
 };

 #endif

计算器.cpp

 #include <QtGui>    
 #include <math.h>    
 #include "calculator.h"

 Calculator::Calculator(QWidget *parent)
     : QWidget(parent)
 {
     QGridLayout *mainLayout = new QGridLayout;
     setWindowTitle(tr("Calculator"));
 }              

感谢您的帮助!

【问题讨论】:

  • 做一个最小的小例子来说明问题。不要只是在这里复制所有内容。
  • 我已经上传了最小的小例子。谢谢。

标签: c++ qt cmake vtable


【解决方案1】:

CMakeLists.txt中的这一行:

add_executable(calculator main.cpp) #calculator.cpp button.cpp)

您可能不知道这一点,但# 指定了注释。因此,cmake 未设置为将 calculator.cppbutton.cpp 编译或链接到您的可执行文件中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-23
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多