2

我是 Qt 的新手,交叉编译和移植,所以请多多包涵。

我的目标是将 Playbook OS 上的Qwt 库用于基于 Qt 的应用程序。我在Qt for Blackberry Playbook上找到了一个不错的教程,并且我设法在我的平板电脑上运行了一个简单的 Qt“Hello World”应用程序。

我的下一步是构建 Qwt 库并在我的应用程序中使用它。我花了一些时间阅读有关 qmake 的信息,并且我构建了该库以及一个没有问题的应用程序,但是当我运行该应用程序时,它一启动就崩溃了。

以下是我在构建库和我的应用程序时采取的步骤:

  1. 下载了 Qwt 的源代码并使用了RIM 的 Qt port附带的 qmake 。供参考:安装 Qt 端口时,它会创建一个“stage”目录,qmake 位于此处:~/stage/nto/armle-v7/usr/lib/qt4/bin/qmake. 首先我有一个关于设计器插件的错误,但是在关闭设计器开关后,它编译时没有错误或警告。
  2. 我已经构建了 Qwt 附带的示例之一。我只在代码中在线添加(根据教程说明)QCoreApplication::addLibraryPath("app/native/lib");:. 这需要告诉应用程序在运行时位于设备上的共享库的位置。这里也没有问题。我的 .pro 文件如下所示:

包括($${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 回答