【问题标题】:Unable to include static library containing QObject class into Cascades project无法将包含 QObject 类的静态库包含到 Cascades 项目中
【发布时间】:2013-08-21 08:18:29
【问题描述】:

我在基于 Qt 的新 BB10 平台上工作。

我有一个静态库项目,它定义了一个QObject 类(基本上该类发送信号并有几个插槽)。该项目编译良好,并为我提供了一个不错的libwhathever.a 文件

当我尝试将这个库包含在我的 Cascades 项目中时,我在构建时遇到以下错误:

  • 未定义的引用 com::vasco::digipass::sdk::utils::qrcodescanner::MyClass::staticMetaObject
  • 未定义的引用 com::vasco::digipass::sdk::utils::qrcodescanner::MyClass::newQRCodeDetected(QString)
  • 未定义的引用 com::vasco::digipass::sdk::utils::qrcodescanner::MyClass::staticMetaObject 外部位置: c:\Developer\bbndk\target_10_1_0_2342\qnx6\usr\include\qt4\QtCore\qobject.h
  • 未定义的引用 com::vasco::digipass::sdk::utils::qrcodescanner::MyClass::staticMetaObject 外部位置: c:\Developer\bbndk\target_10_1_0_2342\qnx6\usr\include\qt4\QtDeclarative\qdeclarative.h
  • 未定义的引用 com::vasco::digipass::sdk::utils::qrcodescanner::MyClass::staticMetaObject 外部位置: c:\Developer\bbndk\target_10_1_0_2342\qnx6\usr\include\qt4\QtDeclarative\qdeclarative.h
  • 未定义对 vtable 的引用 com::vasco::digipass::sdk::utils::qrcodescanner::MyClass
  • 未定义 参考 vtable 为 com::vasco::digipass::sdk::utils::qrcodescanner::MyClass

我怀疑我错过了处理 Q_OBJECT 宏的编译步骤。 我在正确的轨道上吗? 我听说过mocqmake,但我不知道如何以及何时在构建过程中使用它们。

【问题讨论】:

    标签: qt blackberry-10 qmake blackberry-cascades moc


    【解决方案1】:

    简单的经验法则是每当您使用Q_OBJECT 引入新类时重新运行qmake,因为它会生成moc 文件。尝试清理,然后重新运行 qmake,然后再次构建项目,它应该可以解决它。

    【讨论】:

      【解决方案2】:

      我在源文件和头文件上运行了 qmake,但由于某种原因它没有生成任何 moc 文件。

      我实际上只是通过在定义 Q_OBJECT 的头文件上运行 moc 来解决我的问题。它生成了我需要的 moc 文件,我的未定义引用消失了。

      【讨论】:

      • 应该为您的项目文件而不是源文件运行 QMake。它会在每个必要的标题上运行 moc。
      • 是的没错,我在运行qmake之前实际上做了一个简单的.pro文件。最后,我所需要的只是在一个标头上调用 moc,其余的编译是通过 ant 脚本完成的
      猜你喜欢
      • 2014-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-10
      • 1970-01-01
      • 2018-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多