2011-11-25 117 views
2

我是Qt新手,交叉编译和移植,请耐心等待。将Qwt库移植到剧本中

我的目标是在Playbook OS上对基于Qt的应用程序使用Qwt library。我在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文件看上去如下:

包括($$ {密码} /../ 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来暂时调试(出于其他原因)。

非常感谢您对我学习体验的贡献。

回答

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