将 Qwt 库移植到 playbook

Posted

技术标签:

【中文标题】将 Qwt 库移植到 playbook【英文标题】:Porting Qwt library to playbook 【发布时间】:2011-11-25 16:26:46 【问题描述】:

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

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

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

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

    下载了 Qwt 的源代码并使用了 RIM's Qt port 附带的 qmake。供参考:安装 Qt 端口时,它会创建一个 "stage" 目录,qmake 位于此处:~/stage/nto/armle-v7/usr/lib/qt4/bin/qmake。首先我遇到了关于设计器插件的错误,但在关闭设计器开关后,它编译时没有任何错误或警告。 我已经构建了一个随 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 进行调试(出于其他原因)。

提前感谢您为我的学习经历做出的贡献。

【问题讨论】:

【参考方案1】:

[已解决]

正如我在问题中提到的,我在 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

【讨论】:

以上是关于将 Qwt 库移植到 playbook的主要内容,如果未能解决你的问题,请参考以下文章

如何链接到 Ubuntu 上的 Qwt 库?

Qwt: 编译 · 安装

无法在 Qt 中链接 qwt

如何在 Qt 4.7 中使用 Qwt

Windows环境下QWT安装及配置

在 OS X Lion 上安装 qwt 库