0

我目前正在使用 Cocos2dx 提供的 BBTemplateProject 示例为 BB10 平台构建 Cocos2d-x 游戏。我是 C++ 编程的新手,目前的游戏是我已经工作了一段时间的 java 项目的一个端口。为了保存游戏数据(分数、一些设置等),我打算使用 BB10 提供的 QtSQl 库。我已经在示例 Cascades 应用程序中成功运行了一些示例 Qtsql 代码,并且运行良好。但是,将相同的代码集成到我的 Cocos2dx BB10 项目中是行不通的。我使用momentics IDE并已将qt4、QtCore、QtDeclarative、路径/符号添加到项目中,但仍然收到以下错误

undefined reference to `QObject::QObject(QObject*)'
undefined reference to `vtable 
undefined reference to `QSqlDatabase::defaultConnection'
.. and a bunch of other Q- related object errors.

在这里阅读 Qobject http://developer.blackberry.com/cascades/reference/moc.html后, 我怀​​疑 MOC 编译器没有引用引用或类似问题。此外,鉴于相同的代码在 Momentics IDE 中集成到自动生成的级联项目中时运行良好,我被认为是某种 moc 编译器问题。鉴于我对 C++ 开发还很陌生,我仍然无法弄清楚如何将适当的 qmake 文件规则添加到 Momentics IDE 以识别 Qobjects 。这方面需要帮助。

肯定会感谢经验丰富的 c++ 开发人员提供的有关如何解决此问题的任何指示,或者在 cocos2dx blackberry 10 项目中存储数据的更好方法。

提前致谢。

编辑 :

这是迄今为止我在尝试使用 QtSql 进行数据库交互方面的进展。QtSQl 需要 QtCore,其中包含上面的 QObject。到目前为止,我一直无法成功集成 QtCore 库。

我做了以下事情。

  • 使用以下过程将 /usr/include/qt4 和 /usr/include/QtCore 和 /usr/include/QtSql 添加到我的包含列表中

  • 在 Project Explorer 中右键单击您的项目并选择 Properties

  • 将树扩展为 C/C++ 常规/路径和符号
  • 将路径和符号框架中的配置更改为 [所有配置]
  • 单击 Includes 标记并在 Languages 列表中选择 GNU C(或对每种语言都执行此操作)。
  • 单击添加...并键入 ${QNX_TARGET}/usr/include/qt4 并按确定
  • 单击添加...并键入 ${QNX_TARGET}/usr/include/qt4/QtCore 并按确定

  • 使用 Momentics IDE 添加库函数将 QtCore 和 QtSql 添加到项目中。右键单击->配置->添加库和标准 BlackBerry 平台库。该库已成功添加。

我基本上遵循了在黑莓 10 sdk 中添加 QtCore 库的相关文章中详述的步骤。但是现在得到这个错误。

\win32\x86\usr\bin\ntoarm-ld: cannot find -lQtCore

那篇文章中的 OP 提到了解决“一些链接器问题”,但没有提到如何解决。我还尝试修改 bar-descriptor.xml 文件添加以下行

  <env var="LD_LIBRARY_PATH" value="app/native/lib:/usr/lib/qt4/lib"/>
<asset path="${QNX_TARGET}\${CPUVARDIR}usr\lib\qt4\lib\libQtCore.so" type="Qnx/Elf">lib/libQtCore.so.4</asset>

错误仍然存​​在。如何解决此“链接器”或 library-no-found 错误?非常感谢。

4

1 回答 1

1

首先,如果您打算在 BlackBerry 10 和我猜的 Android 上使用相同的应用程序,因为您来自 Java,我会尝试使用比 Qt 更小的东西,例如SQLite library,以使其尽可能简单两个平台之间的端口。但是您显然可以在 BB10 上使用 QtSQL 并在 Android 中使用其他东西,您将需要编写更多代码。

其次,关于您的问题:未定义的引用QObject::QObject(QObject*)意味着您正在使用此符号(QObject构造函数,您可能正在调用它,因为你们中的一个类继承自QObject),但没有提供它。您可能已经将 QtCore 添加到您的包含路径中,因为编译器找到了它,但不是链接器:您需要指定您希望您的应用程序与之链接QtCore.so(或者QtCore4.so,我现在没有 SDK 来检查确切的姓名)。您将在此处找到有关如何执行此操作所需的一切。

关于 moc:moc 代表 Meta Object Compiler。它基本上解析你的标题,寻找你的类的元数据:主要是属性、信号和插槽。更具体地说,所有需要Q_OBJECT宏的东西。如果您不使用这些功能,则不需要运行 moc。

如果你必须运行它(因为你使用了一些元对象功能):你有两个选择。选项一:使用 QMake 编译您的项目。您必须从头开始将您的项目重新创建为 Qt 项目(可能与 Momentics 上的 Cascades 项目没有区别,但这只是删除您链接到的库的问题,没什么大不了的)才能做到这一点。选项二:添加自定义规则以在需要它的标头上运行 moc。它将生成一些 moc_yourclass.cpp 文件,您需要将这些文件包含在您的项目中。我不知道如何在 Momentics 上添加自定义步骤,但我认为它应该是可行的……</p>

于 2013-07-27T01:00:06.307 回答