【问题标题】:Using Qt5 in a library在库中使用 Qt5
【发布时间】:2013-05-06 11:49:11
【问题描述】:

我有一个集成了一些 GTK 功能的库,我决定改用 Qt。 所以我创建了一个测试 cmake 文件来尝试集成 Qt5,但它不起作用,因为当我使用可执行文件动态加载库时,我得到“未定义的符号”。

undefined symbol: _ZN8UIWindow16staticMetaObjectE

我用谷歌搜索了很多,似乎没有那么简单的任何帮助,或者 cmets 将不胜感激。

Here是我使用的相关文件。

【问题讨论】:

    标签: c++ cmake shared-libraries qt5


    【解决方案1】:

    好的,我找到了解决方案。由于我对头文件和源文件使用不同的文件夹,所以我必须手动指定包含 qt 代码的文件在哪里。

    QT5_WRAP_CPP( MOCS_HDRS ${INCLUDE_DIR}/UIWindow.h )

    【讨论】:

    • 这是automoc的限制吗?
    【解决方案2】:

    该错误表明您的 UIWindow 类的 MOC 文件未正确生成或构建。 Qt 需要 MOC (MetaObject Compiler, IIRC) 生成的类的某些元信息。
    您的 CMake 脚本打开了通常可以工作的 automoc,因此我建议您查看 CMake 的输出,看看它是否正在为您的班级运行该步骤。

    【讨论】:

    • 好的。我检查了构建文件夹,我有一个文件 libtest_automoc.cpp(除了预期的其他文件:libtest.so 等)。但是文件几乎是空的,所以 mocs 的生成可能有问题。 /* This file is autogenerated, do not edit*/ enum some_compilers { need_more_than_nothing };
    • @Athanase - 我希望你的构建位置也有一个 moc_UIWindow.cpp 文件 - 该文件不应为空,但应包含生成的代码。
    • 嗯,我不知道为什么......我看了这个post和这个example,但它没有帮助我。
    • CMake 脚本中注释掉的行(我认为是 78 行)手动调用 moc,尝试启用它并检查差异。
    • 我评论了这一行,因为当我搜索 .moc 文件时它不会改变任何东西。什么都没有生成:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多