将Qwt库移植到playbook

时间:2011-11-25 16:26:47

标签: qt porting blackberry-playbook qwt qnx

我是Qt的新手,交叉编译和移植所以请耐心等待。

我的目标是在Playbook操作系统上使用Qwt library来获取基于Qt的应用程序。我在Qt for Blackberry Playbook找到了一个很好的教程,我设法在我的平板电脑上运行了一个简单的Qt“Hello World”应用程序。

我的下一步是构建Qwt库并在我的应用程序中使用它。我花了一些时间阅读关于qmake的文章,我和一个没有问题的应用程序一起构建了库,但是当我运行应用程序时,它会在我启动它时立即崩溃。

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

  1. 下载了Qwt的源代码并使用了RIM's Qt port附带的qmake。供参考:安装Qt端口时,它将创建一个“stage”目录,qmake位于此处:~/stage/nto/armle-v7/usr/lib/qt4/bin/qmake。首先我有关于设计器插件的错误,但在关闭设计器关闭后,它编译时没有错误或警告。
  2. 我已经建立了Qwt附带的一个样本。我只在代码中添加了(基于教程说明):QCoreApplication::addLibraryPath("app/native/lib");。这需要告诉应用程序在运行时哪个位于设备上的共享库。这里也没问题。我的.pro文件如下所示:
  3. 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?如果不是我在这些步骤中遗漏了什么?

    BTW我暂时无法使用Momentics进行调试(出于其他原因)。

    提前感谢您对我的学习经历的贡献。

1 个答案:

答案 0 :(得分: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) < br />
和类似的错误:

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