2013-07-26 6 views
0

В настоящее время я работаю над созданием игры Cocos2d-x для платформы BB10 с использованием образца BBTemplateProject, предоставленного Cocos2dx. Я новичок в программировании на C++, и текущая игра представляет собой порт java-проекта, над которым я работал некоторое время. Чтобы сохранить игровые данные (оценки, некоторые настройки и т. Д.), Я намерен использовать библиотеку QtSQl, которую предоставляет BB10. Я успешно запускал образец кода Qtsql в примере приложения Cascades и отлично работает. Однако интеграция того же кода в мой проект Cocos2dx BB10 просто не работает. Я использую IDE Momentics и добавили qt4, QtCore, QtDeclarative, дорожки/символы к проекту, но по-прежнему Получать следующие ошибкиКак импортировать и использовать QObject в приложении на базе BB10 Cocos2D

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.

Заранее благодарен.

Edit:

Вот, мой прогресс до сих пор в попытке использовать QtSql для взаимодействия с базой данных. QtSQl требует QtCore, который содержит QObject выше. До сих пор мне не удалось успешно интегрировать библиотеку QtCore.

Я сделал следующее.

  • Добавлена ​​/ USR/включать/qt4 и/USR/включать/QtCore и/USR/включать/QtSql к моему включают список, используя следующую процедуру

  • Щелкните правой кнопкой мыши над проектом в Project Explorer, и выберите Свойства

  • Разверните дерево на C/C++ Общие/Paths и символы
  • Изменение конфигурации в кадре Контуры и символы, чтобы [Все конфигурации]
  • Нажмите Включает метку и выберите GNU C в списке «Языки» (или сделать это для каждого языка).
  • Нажмите кнопку Добавить ... и введите $ {QNX_TARGET}/USR/включать/qt4 и нажмите OK
  • Нажмите кнопку Добавить ... и введите $ {QNX_TARGET}/USR/включать/qt4/QtCore и нажмите OK

  • Используется функция библиотеки Momentics IDE для добавления в проект как QtCore, так и QtSql. RightClick-> configure-> добавить библиотеку и стандартную библиотеку платформы BlackBerry. Библиотека успешно добавлена.

Я в основном выполнил шаги, описанные в этой статье Adding QtCore Library in blackberry 10 sdk. Но теперь получите эту ошибку.

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

ОП в этом сообщении упоминает решение «некоторых проблем с компоновщиками», но не упоминает, как это сделать. Я также попытался изменить файл 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> 

Ошибка по-прежнему сохраняется. Как решить эту ошибку «компоновщика» или библиотеки? Большое спасибо.

ответ

1

Во-первых, если вы планируете использовать одно и то же приложение как на BlackBerry 10, так и на Android, поскольку вы приходят с Java, я бы попытался использовать что-то меньшее, чем Qt, например SQLite library, чтобы это было просто насколько это возможно, между двумя платформами. Но вы, очевидно, можете использовать QtSQL на BB10 и что-то еще в Android, у вас просто будет больше кода для записи.

Во-вторых, что касается вашего вопроса: неопределенная ссылка на QObject::QObject(QObject*) означает, что вы используете этот символ (в QObject конструктор, который вы, вероятно, звоню, потому что один из вас класс наследует от QObject), но ничего не снабдив его. Вероятно, вы добавили QtCore в свой путь include, как его нашел компилятор, но не для компоновщика: вам нужно указать, что вы хотите, чтобы ваше приложение было связано с QtCore.so (или, может быть, QtCore4.so, у меня сейчас нет SDK, чтобы проверить точное название). Вы найдете все, что вам нужно, о том, как это сделать. here.

О moc: moc - это компилятор метаобъектов. Он в основном анализирует ваши заголовки, ищет метаданные на ваших классах: в основном свойства, сигналы и слоты. В частности, все, что требует макроса Q_OBJECT. Если вы не используете эти функции, вам не нужно запускать moc.

Если вам нужно запустить его (потому что вы используете некоторые функции метаобъекта): у вас есть два варианта. Вариант один: используйте QMake для компиляции вашего проекта. Вам нужно будет воссоздать свой проект с нуля как проект Qt (возможно, не отличаться от проектов Cascades от Momentics, но это просто вопрос удаления библиотек, на которые вы ссылаетесь, а не большое дело) для этого. Второй вариант: добавьте пользовательские правила для запуска moc в заголовках, нуждающихся в этом. Он будет генерировать некоторые файлы moc_yourclass.cpp, которые вам нужно будет включить в свой проект. Я не знаю, как сделать добавочный шаг на Momentics, но я думаю, что это должно быть выполнимо ...

+0

Hi Kernald, Спасибо за подробный ответ, я обязательно проведу ссылку, которую вы указали при ссылке на QtCore .so и т. д. Надеюсь, он решает мою неопределенную ссылочную проблему. Однако вы поднимаете важный параметр, который я хотел бы удвоить, используя библиотеку SQLite. Как использовать библиотеку SQLite на bb10? Ранее я предполагал, что единственный способ использовать sqlite на BB10 - использовать QtSQL. Эта ? https://developer.blackberry.com/cascades/reference/bb__data__sqldataaccess.html? P.S Я не использую одно и то же приложение на Android и BB10. Версия Android была написана в cocos2d для android, java-порт. –

+1

Ну, я думал об этом: http://www.sqlite.org/capi3ref.html, который является «официальной» библиотекой SQLite (я также добавил ссылку в свой ответ, чтобы избежать путаницы). Другие - в основном обертки вокруг него или перекодируют одни и те же функции с более полным API/абстракцией. Преимущество состоит в том, чтобы быть полностью кросс-платформенным. Однако, если вы планируете использовать этот код только на BB10, SqlDataAccess или QtSql будет лучшим выбором, я думаю. По крайней мере, проще в использовании. Я не знал о SqlDataAccess. Я думаю, вам будет нужно сравнить его с QtSql и выбрать то, что вы предпочитаете. –

+0

Ваша ссылка звучит как хороший вариант. Однако я полагаю, что интеграция с BB10 может стать еще одним перетягиванием каната. Из образцов, которые Iv видел с использованием SqlDataAcess, работает в соединении с QtSql, а не независимо от работы (http://developer.blackberry.com/cascades/reference/bb__data__sqldataaccess.html). Говоря все, есть несколько ценных Q-функций (e.g QString), которые идут вместе с успешным импортом/интеграцией библиотек QtCore/Qtsql, которые мотивируют выбор перехода с QtSql. –