【问题标题】:undefined function during cmake linking local filecmake链接本地文件期间未定义的函数
【发布时间】:2013-12-11 16:10:24
【问题描述】:

我正在尝试将一个小型 Qt 示例编译为可执行文件(test.cpp 包含 main),然后添加对将非 test.cpp 代码编译到其自己的库的支持。我正在使用 qmake,但现在我正在尝试按照示例 here 使用 cmake。不幸的是,我遇到了链接错误。看起来在链接时找不到我在正在编译的 cpp 文件中定义的构造函数。

$ make
Linking CXX executable test
CMakeFiles/test.dir/attribute_editor.cpp.o: In function `AttributeEditor::AttributeEditor(QWidget*)':
attribute_editor.cpp:(.text+0x2a): undefined reference to `vtable for AttributeEditor'
CMakeFiles/test.dir/bindable.cpp.o: In function `Bindable::Bindable(QObject*)':
bindable.cpp:(.text+0x50): undefined reference to `vtable for Bindable'
CMakeFiles/test.dir/bindable.cpp.o: In function `AttributeObject::AttributeObject()':
bindable.cpp:(.text._ZN15AttributeObjectC2Ev[_ZN15AttributeObjectC5Ev]+0x24): undefined reference to `vtable for AttributeObject'
collect2: error: ld returned 1 exit status
make[2]: *** [test] Error 1
make[1]: *** [CMakeFiles/test.dir/all] Error 2
make: *** [all] Error 2

这是我的 cmake 文件...

cmake_minimum_required(VERSION 2.8)

# http://qt-project.org/quarterly/view/using_cmake_to_build_qt_projects

PROJECT(qattrs)
FIND_PACKAGE(Qt4 REQUIRED)
SET(QT_USE_QTSCRIPT TRUE)

SET(qattrs_SOURCES test.cpp attribute_editor.cpp bindable.cpp)
SET(qattrs_HEADERS bindable.h attribute_editor.h)

QT4_WRAP_CPP(qattrs_HEADERS_MOC ${qattrs_HEADERS})

INCLUDE(${QT_USE_FILE})
ADD_DEFINITIONS(${QT_DEFINITIONS})

ADD_EXECUTABLE(test ${qattrs_SOURCES} ${qattrs_HEADER_MOC})
TARGET_LINK_LIBRARIES(test ${QT_LIBRARIES})

我对 cmake 知之甚少,但我认为它不包括链接期间的 .o 文件。

整个代码(五个或六个文件)位于github

【问题讨论】:

    标签: c++ qt linker cmake


    【解决方案1】:

    它无法找到某个东西的 vtable - 这意味着它正在寻找一个类型将放入它的 vtable 中的条目(如果它存在的话),因为它是一个链接器。 (这不是在谈论在运行时缺少 vtable 的类型,因为那根本没有意义,我什至不喜欢那句话)

    你有一个从未定义过的纯虚拟方法。

    该代码真的很难阅读和阅读它我什至在 bindable.h 中都看不到任何虚函数,这意味着父类中有一个纯虚函数而你从未实现它,这是你的错误。

    更具体地说,您永远不会实现其中的 3 个。

    我会因为不说而感到难过: wxWidgets FTW :P

    【讨论】:

      【解决方案2】:

      我找到了另一个问题的答案。它不在示例 Qt 文档中,但我只需要设置另一个环境变量。

      设置(CMAKE_AUTOMOC ON)

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-24
        • 2010-10-19
        • 2020-10-21
        • 1970-01-01
        • 2021-09-01
        • 2016-06-10
        相关资源
        最近更新 更多