将 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的主要内容,如果未能解决你的问题,请参考以下文章