Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.08.2017, 11:23   #1
Xuch
Пользователь
 
Регистрация: 25.03.2013
Сообщений: 36
По умолчанию Прошу помощи с кросс-компиляцией библиотеки qt-gstreamer (QtGstreamer) для ARM

Всем доброго времени суток!
Мучаюсь с компиляцией библиотеки qt-gstreamer-0.10.1 под целевую плату на ARM процессоре. Работаю под Ubuntu Trusty (14.04).
Для начала потренировался собрать из исходников под рабочую систему Trusty для i386. После некоторых танцев с бубном это удалось успешно.
Но вот с кросс-компиляцией ничего не получается. В качестве зависимостей там указываются: Qt 4 - Required for building everything
* Boost - Required for building QtGLib
* Automoc 4 - Required for the build system to generate moc files properly
* GStreamer - Required to build QtGStreamer
* GStreamer base library - Used for building the qwidgetvideosink element
* GStreamer app library - Required to build QtGStreamerUtils
* GStreamer interfaces library - Required to build QtGStreamer
* GStreamer video library - Used for building the qwidgetvideosink element
* GLib - Required to build QtGLib
* GObject - Required to build QtGLib
* Flex - Required to build codegen, a helper code generator
* Bison - Required to build codegen, a helper code generator
* Doxygen - Used to generate the API documentation

Но дальше мне не совсем понятно. Когда я скомпилировал automoc4 под ARM и положил его в мой Target ARM SDK, при попытке собрать QtGstreamer вылетала ошибка shell, что /usr/bin/automoc4 не найден и посему он не может сгенерировать файлы и т.д. Хорошо, установил automoc4 под Trusty (i386), теперь на это он не ругается, но не может собрать codegen. Спустя какое-то количество танцев codegen собрался успешно, в папке build/codegen появился исполняемый файл (естественно для ARM), но далее при попытке сборки QtGstreamer выдает ошибку shell, что codegen не может быть запущен, т.к. имеет неправильный формат (короче он пытается его исполнить под текущей системой i386).

И теперь я вообще запутался: что из этих зависимостей должно быть под i386, а что под ARM? Flex, bison, Doxygen нужны для i386 или соответственно для ARM? Я конечно могу посреди процесса сборки подсунуть codegen, скомпилированный ранее под i386, но как-то это неправильно. Что-то тут не так, а что именно я понять не могу. Зачем он его собирает кросс-компилятором, если собирается его запускать под текущей системой?

Прошу любые мысли и помощь!

Спасибо!

Последний раз редактировалось Xuch; 18.08.2017 в 11:25.
Xuch вне форума Ответить с цитированием
Старый 18.08.2017, 11:32   #2
Xuch
Пользователь
 
Регистрация: 25.03.2013
Сообщений: 36
По умолчанию

Для удобства запуска cmake для кросс-компиляции сделал файлик arm_toolchain.cmake следующего содержания:
Код:
SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_VERSION 1)
SET(CMAKE_C_COMPILER arm-none-linux-gnueabi-gcc)
SET(CMAKE_CXX_COMPILER arm-none-linux-gnueabi-g++)
SET(CMAKE_FIND_ROOT_PATH /home/aroma/ti-ezsdk_dm816x-evm_5_05_02_00)
Запускаю конфигурирование командой
Код:
cmake -DCMAKE_TOOLCHAIN_FILE=arm_toolchain.cmake -DCMAKE_INSTALL_PREFIX=/home/aroma/workspace-bvi/libs/qt-gstreamer-0.10.1/target-bin ..
Xuch вне форума Ответить с цитированием
Старый 18.08.2017, 11:32   #3
Xuch
Пользователь
 
Регистрация: 25.03.2013
Сообщений: 36
По умолчанию

И вот что выдает cmake:
Код:
-- The C compiler identification is GNU 4.3.3
-- The CXX compiler identification is GNU 4.3.3
-- Check for working C compiler: /home/aroma/CodeSourcery/Sourcery_G++_Lite/bin/arm-none-linux-gnueabi-gcc
-- Check for working C compiler: /home/aroma/CodeSourcery/Sourcery_G++_Lite/bin/arm-none-linux-gnueabi-gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /home/aroma/CodeSourcery/Sourcery_G++_Lite/bin/arm-none-linux-gnueabi-g++
-- Check for working CXX compiler: /home/aroma/CodeSourcery/Sourcery_G++_Lite/bin/arm-none-linux-gnueabi-g++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Looking for Q_WS_X11
-- Looking for Q_WS_X11 - not found
-- Looking for Q_WS_WIN
-- Looking for Q_WS_WIN - not found
-- Looking for Q_WS_QWS
-- Looking for Q_WS_QWS - found
-- Looking for Q_WS_MAC
-- Looking for Q_WS_MAC - not found
-- Found Qt4: /home/aroma/ti-ezsdk_dm816x-evm_5_05_02_00/linux-devkit/bin/qmake (found version "4.7.2") 
-- Boost version: 1.55.0
-- Found PkgConfig: /home/aroma/ti-ezsdk_dm816x-evm_5_05_02_00/linux-devkit/bin/pkg-config (found version "0.23") 
-- checking for module 'gstreamer-0.10'
--   found gstreamer-0.10, version 0.10.32
-- checking for module 'gstreamer-base-0.10'
--   found gstreamer-base-0.10, version 0.10.32
-- Found GSTREAMER_BASE_LIBRARY: /home/aroma/ti-ezsdk_dm816x-evm_5_05_02_00/linux-devkit/arm-none-linux-gnueabi/usr/lib/libgstbase-0.10.so
-- Found GSTREAMER_BASE_INCLUDE_DIR: /home/aroma/ti-ezsdk_dm816x-evm_5_05_02_00/linux-devkit/arm-none-linux-gnueabi/usr/include/gstreamer-0.10
-- Found GStreamer: /home/aroma/ti-ezsdk_dm816x-evm_5_05_02_00/linux-devkit/arm-none-linux-gnueabi/usr/lib/libgstreamer-0.10.so (Required is at least version "0.10.31") 
-- checking for module 'gstreamer-plugins-base-0.10'
--   found gstreamer-plugins-base-0.10, version 0.10.32
-- checking for module 'gstreamer-app-0.10'
--   found gstreamer-app-0.10, version 0.10.32
-- Found GSTREAMER_APP_LIBRARY: /home/aroma/ti-ezsdk_dm816x-evm_5_05_02_00/linux-devkit/arm-none-linux-gnueabi/usr/lib/libgstapp-0.10.so
-- Found GSTREAMER_APP_INCLUDE_DIR: /home/aroma/ti-ezsdk_dm816x-evm_5_05_02_00/linux-devkit/arm-none-linux-gnueabi/usr/include/gstreamer-0.10
-- checking for module 'gstreamer-interfaces-0.10'
--   found gstreamer-interfaces-0.10, version 0.10.32
-- Found GSTREAMER_INTERFACES_LIBRARY: /home/aroma/ti-ezsdk_dm816x-evm_5_05_02_00/linux-devkit/arm-none-linux-gnueabi/usr/lib/libgstinterfaces-0.10.so
-- Found GSTREAMER_INTERFACES_INCLUDE_DIR: /home/aroma/ti-ezsdk_dm816x-evm_5_05_02_00/linux-devkit/arm-none-linux-gnueabi/usr/include/gstreamer-0.10
-- checking for module 'gstreamer-video-0.10'
--   found gstreamer-video-0.10, version 0.10.32
-- Found GSTREAMER_VIDEO_LIBRARY: /home/aroma/ti-ezsdk_dm816x-evm_5_05_02_00/linux-devkit/arm-none-linux-gnueabi/usr/lib/libgstvideo-0.10.so
-- Found GSTREAMER_VIDEO_INCLUDE_DIR: /home/aroma/ti-ezsdk_dm816x-evm_5_05_02_00/linux-devkit/arm-none-linux-gnueabi/usr/include/gstreamer-0.10
-- Found GStreamerPluginsBase: TRUE (Required is at least version "0.10.31") 
-- checking for module 'glib-2.0'
--   found glib-2.0, version 2.24.1
-- Found GLIB2: /home/aroma/ti-ezsdk_dm816x-evm_5_05_02_00/linux-devkit/arm-none-linux-gnueabi/usr/lib/libglib-2.0.so  
-- checking for module 'gobject-2.0'
--   found gobject-2.0, version 2.24.1
-- Found GObject: /home/aroma/ti-ezsdk_dm816x-evm_5_05_02_00/linux-devkit/arm-none-linux-gnueabi/usr/include/glib-2.0  
-- Found FLEX: /usr/bin/flex (found version "2.5.35") 
-- Found BISON: /usr/bin/bison (found version "3.0.2") 
-- Found Doxygen: /usr/bin/doxygen (found version "1.8.6") 
-- Found DOXYFILE_IN: /home/aroma/workspace-bvi/libs/qt-gstreamer-0.10.1/Doxyfile.in  

-----------------------------------------------------------------------------
-- The following external packages were located on your system.
-- This installation will have the extra features provided by these packages.
-----------------------------------------------------------------------------
   * Qt 4 - Required for building everything
   * Boost - Required for building QtGLib
   * Automoc 4 - Required for the build system to generate moc files properly
   * GStreamer - Required to build QtGStreamer
   * GStreamer base library - Used for building the qwidgetvideosink element
   * GStreamer app library - Required to build QtGStreamerUtils
   * GStreamer interfaces library - Required to build QtGStreamer
   * GStreamer video library - Used for building the qwidgetvideosink element
   * GLib - Required to build QtGLib
   * GObject - Required to build QtGLib
   * Flex - Required to build codegen, a helper code generator
   * Bison - Required to build codegen, a helper code generator
   * Doxygen - Used to generate the API documentation

-----------------------------------------------------------------------------
-- Congratulations! All external packages have been found.
-----------------------------------------------------------------------------

-- Configuring done
CMake Warning (dev) in src/QGlib/CMakeLists.txt:
  Policy CMP0022 is not set: INTERFACE_LINK_LIBRARIES defines the link
  interface.  Run "cmake --help-policy CMP0022" for policy details.  Use the
  cmake_policy command to set the policy and suppress this warning.

  Target "QtGLib" has an INTERFACE_LINK_LIBRARIES property which differs from
  its LINK_INTERFACE_LIBRARIES properties.

  INTERFACE_LINK_LIBRARIES:

    /home/aroma/ti-ezsdk_dm816x-evm_5_05_02_00/linux-devkit/arm-none-linux-gnueabi/usr/lib/libQtCoreE.so;gobject-2.0;gthread-2.0;rt;glib-2.0;/home/aroma/ti-ezsdk_dm816x-evm_5_05_02_00/linux-devkit/arm-none-linux-gnueabi/usr/lib/libQtCoreE.so

  LINK_INTERFACE_LIBRARIES:

    /home/aroma/ti-ezsdk_dm816x-evm_5_05_02_00/linux-devkit/arm-none-linux-gnueabi/usr/lib/libQtCoreE.so

This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) in src/QGst/CMakeLists.txt:
  Policy CMP0022 is not set: INTERFACE_LINK_LIBRARIES defines the link
  interface.  Run "cmake --help-policy CMP0022" for policy details.  Use the
  cmake_policy command to set the policy and suppress this warning.

  Target "QtGStreamer" has an INTERFACE_LINK_LIBRARIES property which differs
  from its LINK_INTERFACE_LIBRARIES properties.

  INTERFACE_LINK_LIBRARIES:

    QtGLib;gobject-2.0;gthread-2.0;rt;glib-2.0;/home/aroma/ti-ezsdk_dm816x-evm_5_05_02_00/linux-devkit/arm-none-linux-gnueabi/usr/lib/libgstreamer-0.10.so;/home/aroma/ti-ezsdk_dm816x-evm_5_05_02_00/linux-devkit/arm-none-linux-gnueabi/usr/lib/libgstinterfaces-0.10.so;QtGLib

  LINK_INTERFACE_LIBRARIES:

    QtGLib

This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) in src/QGst/CMakeLists.txt:
  Policy CMP0022 is not set: INTERFACE_LINK_LIBRARIES defines the link
  interface.  Run "cmake --help-policy CMP0022" for policy details.  Use the
  cmake_policy command to set the policy and suppress this warning.

  Target "QtGStreamerUtils" has an INTERFACE_LINK_LIBRARIES property which
  differs from its LINK_INTERFACE_LIBRARIES properties.

  INTERFACE_LINK_LIBRARIES:

    QtGStreamer;/home/aroma/ti-ezsdk_dm816x-evm_5_05_02_00/linux-devkit/arm-none-linux-gnueabi/usr/lib/libgstreamer-0.10.so;/home/aroma/ti-ezsdk_dm816x-evm_5_05_02_00/linux-devkit/arm-none-linux-gnueabi/usr/lib/libgstapp-0.10.so;QtGStreamer

  LINK_INTERFACE_LIBRARIES:

    QtGStreamer

This warning is for project developers.  Use -Wno-dev to suppress it.

-- Generating done
-- Build files have been written to: /home/aroma/workspace-bvi/libs/qt-gstreamer-0.10.1/build
Что может быть не так?
Xuch вне форума Ответить с цитированием
Старый 18.08.2017, 11:34   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Все либу должны либо собираться под АРМ, либо уже быть собранным под него. Тулзы типа компилятора/генераторов/парсеров должны быть для вашей текущей системы, т.к. они будут запускаться на ней.

П.С, Так по логу cmake все сделал...
p51x на форуме Ответить с цитированием
Старый 18.08.2017, 11:36   #5
Xuch
Пользователь
 
Регистрация: 25.03.2013
Сообщений: 36
По умолчанию

Хорошо, а почему тогда codegen, который я так понимаю он использует как вспомогательный инструмент и будет запускать под i386, компилирует под ARM? И как его заставить собирать его под i386 с процессе основной сборки?
Xuch вне форума Ответить с цитированием
Старый 18.08.2017, 11:38   #6
Xuch
Пользователь
 
Регистрация: 25.03.2013
Сообщений: 36
По умолчанию

* Flex - Required to build codegen, a helper code generator
* Bison - Required to build codegen, a helper code generator

Эти должны быть под i386 я так понимаю?
Xuch вне форума Ответить с цитированием
Старый 18.08.2017, 11:52   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

А вы задали CMAKE_SYSTEM_PROCESSOR ?
p51x на форуме Ответить с цитированием
Старый 18.08.2017, 11:57   #8
Xuch
Пользователь
 
Регистрация: 25.03.2013
Сообщений: 36
По умолчанию

Нет..
Добавить еще
SET(CMAKE_SYSTEM_PROCESSOR ARMv7) или просто SET(CMAKE_SYSTEM_PROCESSOR ARM)?
Xuch вне форума Ответить с цитированием
Старый 18.08.2017, 12:42   #9
Xuch
Пользователь
 
Регистрация: 25.03.2013
Сообщений: 36
По умолчанию

CMAKE_SYSTEM_PROCESSOR задал, ничего не изменилось((
Xuch вне форума Ответить с цитированием
Старый 18.08.2017, 12:44   #10
Xuch
Пользователь
 
Регистрация: 25.03.2013
Сообщений: 36
По умолчанию

И я не понимаю, почему cmake правильно находит gstreamer в папке с SDK, а boost берет из моей системы i386 из /usr, хотя лежит ARM'овский boost в папке с SDK рядом с gstreamer'ом...

Странно как-то
Xuch вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
GNU ARM автоматический поиск .c файлов библиотеки Aoizora Микроконтроллеры, робототехника, схемотехника, 3D принтеры 5 01.08.2017 07:29
Работа с периферией ARM F100RBT6B без библиотеки CMSIS Aoizora Микроконтроллеры, робототехника, схемотехника, 3D принтеры 4 18.07.2017 22:47
Прошу помощи в написании программ для работы с текстовыми файлами Никита757 Паскаль, Turbo Pascal, PascalABC.NET 1 15.12.2015 21:35
Прошу помощи в разборе куска кода драйвера RIL под ARM Lebets_VI Win Api 0 14.08.2009 13:58