2

私は Qt のクロス コンパイルと移植が初めてなので、ご容赦ください。

私の目標は、Qt ベースのアプリケーションに Playbook OS でQwt ライブラリを使用することです。Qt for Blackberry Playbookに関するすばらしいチュートリアルを見つけ、タブレットで簡単な Qt "Hello World" アプリケーションを実行することができました。

私の次のステップは、Qwt ライブラリを構築し、それをアプリケーションで利用することでした。私はqmakeについて読むのに時間を費やし、問題のないアプリケーションとともにライブラリを構築しましたが、アプリケーションを実行すると、起動するとすぐにクラッシュします。

ライブラリとアプリの両方を構築する際に行った手順は次のとおりです。

  1. Qwt のソースをダウンロードし、RIM の Qt ポートに付属の qmake を使用しました。参考までに: Qt ポートをインストールすると、「ステージ」ディレクトリが作成され、qmake は次の場所にあります~/stage/nto/armle-v7/usr/lib/qt4/bin/qmake。まず、デザイナー プラグインに関するエラーが発生しましたが、デザイナー スイッチをオフにすると、エラーや警告なしでコンパイルされました。
  2. Qwt に付属するサンプルの 1 つを作成しました。QCoreApplication::addLibraryPath("app/native/lib");コードにオンラインで追加しただけです(チュートリアルの指示に基づいて):. これは、実行時に共有ライブラリがデバイス上のどこにあるかをアプリケーションに伝えるために必要です。ここでも問題ありません。私の .pro ファイルは次のようになりました。

include( $${PWD}/../examples.pri )

TARGET  = curvdemo1    
DESTDIR = . 

QMAKE_LFLAGS += '-Wl,-rpath,\'./app/native/lib\''
LIBS += -lbbsupport

SOURCES = \    
    curvdemo1.cpp    

package.target = $${TARGET}.bar
package.depends = $$TARGET
package.commands = blackberry-nativepackager \
    -devMode \
    -package $${TARGET}.bar -arg -platform -arg blackberry \
    blackberry-tablet.xml $$TARGET \
    -e icon.png res/icon.png \
    -e splashscreen.png res/splashscreen.png \
    -e $$[QT_INSTALL_LIBS]/libQtCore.so.4 lib/libQtCore.so.4 \
    -e $$[QT_INSTALL_LIBS]/libQtGui.so.4 lib/libQtGui.so.4 \
    -e $$[QT_INSTALL_LIBS]/libQtOpenGL.so.4 lib/libQtOpenGL.so.4 \
    -e $$[QT_INSTALL_LIBS]/libQtNetwork.so.4 lib/libQtNetwork.so.4 \
    -e $$[QT_INSTALL_LIBS]/libbbsupport.so.4 lib/libbbsupport.so.4 \
    -e $$[QT_INSTALL_PLUGINS]/platforms/libblackberry.so lib/platforms/libblackberry.so
    -e /home/builder/Qwt/qwt-6.0.1/lib/libqwt.so.6 lib/libqwt.so.6 \
    -e /home/builder/Qwt/qwt-6.0.1/lib/libqwtmathml.so.6 lib/libqwtmathml.so.6 

QMAKE_EXTRA_TARGETS += package

アプリをパッケージ化してデプロイしましたが、スプラッシュスクリーンが消えるとすぐにアプリケーションがクラッシュします。

上記の手順は、Qwt を共有ライブラリとして使用する私の試みを参照しています。QwtDllライブラリの指示に従って削除して静的ライブラリとしてビルドしようとしましたが、最終結果は同じです。バイナリは、そのサイズに基づいて静的ライブラリを使用していることがわかります。

私の少しの知識で、Qwt ライブラリが適切にビルドされておらず、テスト アプリで適切にロードできないと推測できます。もしそうなら、このライブラリを Playbook OS に適切に移植する方法は? そうでない場合、これらの手順で他に何が欠けていますか?

ところで、当分の間、Momentics を使用してデバッグすることはできません (他の理由により)。

私の学習経験に貢献していただきありがとうございます。

4

1 に答える 1

2

[解決済み]

質問で述べたように、私は Qt とクロス コンパイルの両方に慣れていませんが、問題が何であるかを把握し、現在はグラフが Playbook で実行されています。

問題の原因は .pro ファイルでした。ライブラリに付属のサンプルを使用していましたが、それらのプロジェクト ファイルは正しくリンクするように設定されているため、ビルド時にはプロジェクトは問題ありませんでしたが、実行時にチャートが依存する特定のライブラリを見つけることができませんでした。

include( $${PWD}/../examples.pri )ファイルから行を削除しました。実行するとmake、次のような警告と次のような

warning: libQtSvg.so.4, needed by /home/builder/Qwt/qwt-6.0.1/lib/libqwt.so, not found (try using -rpath or -rpath-link)

エラーが多数表示されました。

libqwt.so: undefined reference to QSvgGenerator::~QSvgGenerator()

それは、私の最初のプロジェクトファイルが私のためにこれを管理していたが、初心者を混乱させたという結論につながりました。Playbook に共有ライブラリがありませんでした。

問題を修正した最終的なプロジェクト ファイルは次のようになります。

QMAKE_LFLAGS += '-Wl,-rpath,\'./app/native/lib\''

LIBS += -lQtSvg -lQtXml
LIBS += -lbbsupport
LIBS += -L/home/builder/Qwt/qwt-6.0.1/lib -lqwt -lqwtmathml

INCLUDEPATH += /home/builder/Qwt/qwt-6.0.1/src    
CONFIG += qwt    
QWT_CONFIG     += QwtSvg
QWT_CONFIG     += QwtMathML

SOURCES += main.cpp  

package.target = $${TARGET}.bar
package.depends = $$TARGET
package.commands = blackberry-nativepackager \
    -devMode \
    -package $${TARGET}.bar -arg -platform -arg blackberry \
    blackberry-tablet.xml $$TARGET \
    -e icon.png res/icon.png \
    -e splashscreen.png res/splashscreen.png \
    -e $$[QT_INSTALL_LIBS]/libQtCore.so.4 lib/libQtCore.so.4 \
    -e $$[QT_INSTALL_LIBS]/libQtGui.so.4 lib/libQtGui.so.4 \
    -e $$[QT_INSTALL_LIBS]/libQtOpenGL.so.4 lib/libQtOpenGL.so.4 \
    -e $$[QT_INSTALL_LIBS]/libQtNetwork.so.4 lib/libQtNetwork.so.4 \
    -e $$[QT_INSTALL_LIBS]/libbbsupport.so.4 lib/libbbsupport.so.4 \
    -e $$[QT_INSTALL_LIBS]/libQtSvg.so.4 lib/libQtSvg.so.4 \
    -e $$[QT_INSTALL_LIBS]/libQtXml.so.4 lib/libQtXml.so.4 \
    -e /home/builder/Qwt/qwt-6.0.1/lib/libqwt.so.6 lib/libqwt.so.6 \
    -e /home/builder/Qwt/qwt-6.0.1/lib/libqwtmathml.so.6 lib/libqwtmathml.so.6 \
    -e $$[QT_INSTALL_PLUGINS]/platforms/libblackberry.so lib/platforms/libblackberry.so

QMAKE_EXTRA_TARGETS += package
于 2011-11-29T15:42:27.483 に答える