Портирование библиотеки Qwt в playbook - PullRequest
2 голосов
/ 25 ноября 2011

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

Моя цель - использовать библиотеку Qwt в Playbook OS для приложений на Qt.Я нашел хороший учебник по Qt для Blackberry Playbook , и мне удалось запустить на моем планшете простое приложение Qt "Hello World".

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

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

  1. Загрузил исходный код для Qwt и использовал qmake, который поставляется с портом Qt RIM .Для справки: при установке порта Qt он создаст каталог "stage" , и qmake находится здесь: ~/stage/nto/armle-v7/usr/lib/qt4/bin/qmake.Сначала я получил ошибку о плагине конструктора, но после выключения дизайнера он скомпилировался без ошибок и предупреждений.
  2. Я собрал один из примеров, поставляемых с Qwt.Я только добавил в коде строку (на основе инструкций): QCoreApplication::addLibraryPath("app/native/lib");.Это необходимо, чтобы сообщить приложению, где во время выполнения находятся общие библиотеки, расположенные на устройстве.Здесь тоже нет проблем.Мой файл .pro выглядел следующим образом:

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?Если нет, то, что еще мне не хватает на этих этапах?

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

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

1 Ответ

2 голосов
/ 29 ноября 2011

[РЕШИТЬ]

Как я уже упоминал в своем вопросе, я новичок как в 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
...