Есть ли способ скомпилировать программы на Qt5, написанные на c ++, в Ubuntu Touch?

9

Я создаю программу с Qt5 и C ++, и я хотел бы скомпилировать свою программу для Ubuntu Touch Preview или настольной консоли Ubuntu.

Я использую эти системы на Nexus 7. Я нашел правильный компилятор C ++ ( arm-linux-gnueabihf-g++), но как мне заставить работать Qt5?

Johannes
источник
Если ответ @David Planella решил вашу проблему, вы должны пометить его как «принятый».
четверг,

Ответы:

11

Легкий способ

Вы можете использовать экспериментальную функцию Ubuntu SDK Alpha. Прелесть этого в том, что вам не нужно кросс-компилировать.

Сначала подключитесь к вашему устройству:

  1. Подключите ваше устройство к USB-порту вашего компьютера.
  2. Запустить Qt Creator
  3. Нажмите на вкладку устройства
  4. Нажмите кнопку Включить, чтобы включить режим разработчика
  5. Перейдите в Инструменты> Ubuntu> Устройство> Включить> Компиляция Cpp на устройстве Ubuntu (экспериментально).

Тогда начните взламывать

  1. Откройте проект вашего приложения в Qt Creator
  2. Перейдите в «Сборка»> «Ubuntu»> «Сборка проекта C ++ на устройстве Ubuntu» (экспериментально).

Сборка C ++ Touch проектов на устройстве

И пошли! :-)

Если вам нравится вызов

Вы могли бы скомпилировать приложения на устройстве вручную. Возможно, вы захотите попробовать следующие (не проверенные) шаги:

  1. SSH на ваше устройство под управлением Ubuntu Touch Developer Preview.
  2. Установите необходимые пакеты разработки. В зависимости от того, что вам нужно, вам может понадобиться добавить пакеты в список, но вот первый выстрел:

    sudo apt-get install qt5-default qtbase5-dev libqt5v8-5-dev qtdeclarative5-dev libqt5xmlpatterns5-dev qtscript5-dev qttools5-dev qt3d5-dev qtmultimedia5-dev libqt5svg5-dev qtdeclarative5-dev-tools qttools5-dev-tools qtlocation5-dev qtsensors5-dev qtpim5-dev qt-components-ubuntu

  3. Создайте свое приложение C ++ с помощью выбранной вами системы сборки (cmake, qmake и т. Д.)

Дэвид Планелла
источник
Большое спасибо от вашего ответа! Я попробую это с Ubuntu SDK. К счастью, Nexus 7 - это устройство, работающее на полную мощность, я протестировал второй способ, и он также работает хорошо.
Йоханнес
К счастью, Nexus 7 - это устройство с полным энергопотреблением, я протестировал второй способ с настольным кронштейном Ubuntu, и он хорошо работает, но Ubuntu Touch Developer Preview не находит эти пакеты для разработчиков.
Йоханнес
Дэвид: Я пытаюсь это сделать, но я получаю «Не удается найти пакет» для каждого запрошенного элемента. Я работаю в Pandaboard с Ubuntu 12.40. Вы можете помочь мне?
HMarioD
3

Есть еще одно предложение (третий, но сложный):
1. получить набор инструментов linaro для armhf
2. получить libhybris и platform-api (от phablet-team на launchpad.net )
3. получить динамические библиотеки с устройства ( / lib / arm- linux-gnueabihf и / usr / lib / arm-linux-gnueabihf / )
4. исправьте mkspecs для qmake
5. скомпилируйте
6. добавьте файл <your_app> .desktop в / usr / share / Applications /
7. добавьте строки в / usr / share / qml-phone-shell / Applications / application.js (может быть необязательным, я думаю)
8. продвинуть ваше приложение и ресурсы
9. перезагрузите оболочку или телефон
10. Ваше работающее приложение! (Я проверял это!)

user135193
источник
1

Расширенная инструкция основана на предыдущем ответе. Имейте в виду: эта инструкция описывает разработку Qt / Qml на ПК для Ubuntu Touch без ssh- соединения с устройством и требует инструмента кросс-компиляции, такого как linaro.

ЧАСТЬ 1: создание среды

  1. Получить Ubuntu SDK
  2. Получить набор инструментов: Linaro или wia sudo apt-get install gcc-arm-linux-gnueabihf набор инструментов для установки и его зависимости.
  3. Получите эти две библиотеки libhybris и platform-api плюс библиотеки Qt5 для armhf (можно получить с устройства) или просто загрузите tarball со всеми библиотеками (из tarball ваши нужные библиотеки и заголовки, поместите их в / usr / arm-gnueabihf / lib и / usr / arm-gnueabihf / include ).
  4. Получить модифицированный конфиг qmake - разархивировать его в mkspecs (например, мой в / usr / share / qt5 / mkspecs / ). Внутри unrared директории - qmake.conf . Если что-то пропустили при компиляции - нужно изменить переменную пути в этом файле.
  5. Для Qt Creator создайте новый профиль компиляции: в настройках « Компиляция и развертывание» , на вкладке « Компилятор» - добавьте новый компилятор ( arm-linux-gnueabihf-gcc ), на вкладке « Инструменты» - добавьте новый профиль и укажите тип устройства - General linux-device, Compiler - из них, что вы добавили профиль Qt - универсальный (я использую не перекомпилированный Qt !!!), Qt mkspec - linux-arm-gnueabihf-gcc. Это все, что вам нужно для компиляции. Для отладки - необходимо указать другие параметры. Кроме того, лучше перекомпилировать Qt из источников. Но мне так лень)

ЧАСТЬ 2: развертывание приложения

  1. Wia adb push / data / ubuntu / <some_path> push приложение и ресурсы. ОС может найти их в / <some_path> . Обратите внимание, что нет части / data / ubuntu . Эта часть нужна только adb .
  2. Далее необходимо сделать файл <app_name> .desktop :
    • корень adb
    • adb shell
    • оболочка ubuntu_chroot - переключиться на bash на устройстве
    • cd / usr / share / Applications - перейдите в папку с файлами * .desktop
    • Скопируйте любой из них и отредактируйте (с помощью vi ) для целей вашего приложения (имя, значок, путь и т. Д.)
  3. Следующий шаг, такой же, как предыдущий (вы уже в bash на устройстве):
    отредактируйте файл (с помощью vi ) /usr/share/qml-phone-shell/Applications/applications.js , добавьте часть для вашего приложения в файл, так же, как и другие приложения есть в этом файле. Он должен быть таким же, как в файле <app_name> .desktop.
  4. Перезагрузите оболочку (убив процесс qml-phone-shell ) или перезагрузите телефон ( перезагрузка -p )
  5. Теперь вы можете запустить свое приложение со страницы приложений !

Тестовый пример и оригинальные материалы: EN инструкция и RU инструкция со ссылками для загрузки инструментария и основных библиотек.

Дмитрий Загнойко
источник
Добро пожаловать в Спросите Ubuntu! Хотя это может теоретически ответить на вопрос, было бы предпочтительным включить сюда основные части ответа и предоставить ссылку для справки.
RolandiXor