0

現在、Cocos2dx で提供されている BBTemplateProject サンプルを使用して、BB10 プラットフォーム用の Cocos2d-x ゲームの構築に取り組んでいます。私は C++ プログラミングが初めてで、現在のゲームは、Iv がしばらく取り組んできた 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++ 開発にまったく慣れていないため、 Qobjects を認識するために適切な qmake ファイル ルールを Momentics IDE に追加する方法をまだ理解できていません。この分野では助けが必要です。

経験豊富な C++ 開発者からこれを行う方法や、cocos2dx blackberry 10 プロジェクト内にデータを保存するためのより良い方法についてのアドバイスをいただければ幸いです。

前もって感謝します。

編集 :

これが、データベースとの対話に QtSql を使用しようとするこれまでの私の進歩です。QtSQl には、上記の QObject を含む QtCore が必要です。これまでのところ、QtCore ライブラリをうまく統合できませんでした。

私は次のことをしました。

  • 次の手順を使用して、/usr/include/qt4 と /usr/include/QtCore と /usr/include/QtSql をインクルード リストに追加しました

  • プロジェクト エクスプローラーでプロジェクトを右クリックし、[プロパティ] を選択します。

  • ツリーを C/C++ General / Paths and Symbols に展開します
  • パスとシンボル フレームの構成を [すべての構成] に変更します。
  • [Includes] タグをクリックし、[言語] リストで [GNU C] を選択します (または、すべての言語に対してこれを行います)。
  • [追加...] をクリックし、${QNX_TARGET}/usr/include/qt4 と入力して [OK] を押します。
  • [追加...] をクリックして ${QNX_TARGET}/usr/include/qt4/QtCore と入力し、[OK] を押します。

  • Momentics IDE の追加ライブラリ関数を使用して、QtCore と QtSql の両方をプロジェクトに追加しました。右クリック -> 構成 -> ライブラリと標準の BlackBerry Platform ライブラリを追加します。ライブラリが正常に追加されます。

私は基本的に、この関連記事Adding QtCore Library in blackberry 10 sdk に詳述されている手順に従いました。しかし、今このエラーが発生します。

\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>

エラーはまだ残っています。この「リンカー」またはライブラリが見つからないエラーを解決するにはどうすればよいですか? どうもありがとう。

4

1 に答える 1

1

まず、BlackBerry 10 と Android の両方で同じアプリケーションを使用する予定がある場合は、Java から来ているため、Qt よりも小さいもの ( SQLite ライブラリなど) を使用して、できるだけシンプルに保つようにします。 2 つのプラットフォーム間のポート。しかし、明らかに、BB10 で QtSQL を使用し、Android で他の何かを使用できます。作成するコードが増えるだけです。

第二に、あなたの問題に関して: への未定義の参照QObject::QObject(QObject*)は、このシンボル (QObjectクラスの 1 つが から継承されているためにおそらく呼び出しているコンストラクター) を使用していることを意味しますが、それQObjectを提供しているものはありません。コンパイラが検出したので、おそらくインクルード パスに QtCore を追加しましたが、リンカは追加しませんでした。アプリケーションをリンクするように指定する必要がありますQtCore.so(またはQtCore4.so、正確なコードを確認するための SDK が今のところありません)。名前)。これを行う方法について必要なものはすべてここにあります。

moc について: moc は Meta Object Compiler の略です。基本的にヘッダーを解析し、クラスのメタデータを探します: 主にプロパティ、シグナル、スロットです。より具体的には、Q_OBJECTマクロを必要とするすべてのもの。これらの機能を使用しない場合は、moc を実行する必要はありません。

実行する必要がある場合 (いくつかのメタ オブジェクト機能を使用するため): 2 つのオプションがあります。オプション 1: QMake を使用してプロジェクトをコンパイルします。これを行うには、プロジェクトを Qt プロジェクトとして最初から再作成する必要があります (Momentics の Cascades プロジェクトと区別されない可能性がありますが、リンクしているライブラリを削除するだけで、大したことではありません)。オプション 2: カスタム ルールを追加して、moc を必要とするヘッダーで moc を実行します。プロジェクトに含める必要があるいくつかの moc_yourclass.cpp ファイルが生成されます。Momentics にカスタム ステップを追加する方法はわかりませんが、実行できるはずだと思います…</p>

于 2013-07-27T01:00:06.307 に答える