Портирование библиотеки Qwt в playbook

Я новичок в Qt, кросс-компиляции и портировании, поэтому, пожалуйста, потерпите меня.

Моя цель — использовать библиотеку Qwt в ОС Playbook для приложения на основе Qt. Я нашел хороший учебник по Qt for Blackberry Playbook и Мне удалось запустить простое приложение Qt «Hello World» на моем планшете.

Следующим моим шагом было создание библиотеки Qwt и использование ее в моем приложении. Я потратил некоторое время на чтение о qmake и без проблем собрал библиотеку вместе с приложением, но когда я запускаю приложение, оно вылетает, как только я запускаю его.

Вот шаги, которые я предпринял при создании библиотеки и моего приложения:

  1. Скачал исходный код Qwt и использовал qmake, поставляемый с портом RIM Qt. Для справки: при установке порта 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? Если нет, что еще мне не хватает на этих шагах?

Кстати, я пока не могу использовать Momentics для отладки (по другим причинам).

Заранее благодарю вас за ваш вклад в мой опыт обучения.


person unexplored    schedule 25.11.2011    source источник


Ответы (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
person unexplored    schedule 29.11.2011