Как кросс-компилировать Qt X11 для PowerPC? - PullRequest
2 голосов
/ 07 октября 2010

Я уже некоторое время пытаюсь получить кросс-компиляцию Qt X11 для PowerPC и продолжаю сталкиваться с различными проблемами.

Из информации, предоставленной моей поддержкой Qt, все, что нужно сделать, это:

  1. Создать новый mkspec
  2. Скопируйте существующий каталог в mkspec/ Я использовал linux-g ++ и изменил его.
  3. Измените qmake.conf, чтобы использовать ваш инструментарий, библиотеки и включает
  4. Запустите следующую команду настройки:

    ./configure -arch <your arch> -xplatform <your mkspec> -prefix <where you want Qt installed> <other options>

  5. После завершения настройки запустите make, а затем make install. Вы найдете Qt установленным в каталоге, который вы указали в опции -prefix.

У этого были все виды проблем.

1 Ответ

1 голос
/ 07 октября 2010

Мое решение:

  1. Копировать mkspecs/linux-g++ в mkspecs/linux-g++-<my arch>
  2. Измените mkspecs/linux-g++/qmake.conf, как в примере ниже. Прочитайте комментарии в файле примера для уточнения
  3. Мне не нужно было изменять qplatformdefs.h, хотя вы могли бы для вашей архитектуры
  4. Запуск скрипта configure с параметрами, указанными в вопросе, работал вместе с make и make install
  5. Теперь вы можете скомпилировать свой код для вашего кросс-скомпилированного Qt X11. moc, uic и т. Д. Были скомпилированы для вашего хоста, поэтому они будут генерировать соответствующий код.
  6. Чтобы запустить ваше программное обеспечение с кросс-скомпилированными библиотеками Qt, просто скопируйте /libs из того места, где вы устанавливаете Qt, в папку ваших целей lib, или вы можете поместить его в другую папку и настроить LD_LIBRARY_PATH на включение Qt lib папка.

Пример qmake.conf:

#
# qmake configuration for linux-g++-ppc_74xx
#

MAKEFILE_GENERATOR = UNIX
TEMPLATE           = app
CONFIG             += qt warn_on release incremental link_prl
QT                 += core gui
QMAKE_INCREMENTAL_STYLE = sublib

include(../common/g++.conf)
include(../common/linux.conf)

#
# Modifications to g++.conf
#
# my_arch-g++ is the full executable path of your g++, make sure your PATH
# contains the directory for your toolchain
#
QMAKE_CC         = my_arch-g++
QMAKE_CXX        = my_arch-g++
QMAKE_LINK       = my_arch-g++
QMAKE_LINK_SHLIB = my_arch-g++

#
# I had to provide includes and libraries for packages my toolchain does not
# provide this is mostly X11 and glib stuff.  You'll either have to
# cross-compile it yourself or get it from your distribution
#
QMAKE_CFLAGS     = -I/path/to/your/includes \
                   -L/path/to/your/libs
QMAKE_CXXFLAGS   = $$QMAKE_CFLAGS

#
# Modifications to linux.conf
#
# Same as g++ stuff above
#
QMAKE_AR          = my_arch-ar cqs
QMAKE_OBJCOPY     = my_arch-objcopy
QMAKE_STRIP       = my_arch-strip

#
# I had all kinds of problems linking Qt source with X11 depending on how I
# specified the include paths.  My toolchain provided most X11 functionality
# and I just had to add missing parts in the CXXFLAGS and CFLAGS,
# but specifying exactly where to find X11 includes and libraries specific
# to my toolchain fixed some of the issues I experienced
#
QMAKE_INCDIR_X11  = /path/to/your/toolchain/includes
QMAKE_LIBDIR_X11  = /path/to/your/toolchain/libs

load(qt_config)

UPDATE:

Это решение будет работать для "автономной" компиляции. Если вам нужно собрать Qt X11 для Angstrom, OpenEmbedded, Android, OpenWRT и т. Д., Вам придется использовать соответствующие системы сборки для правильной компиляции. Например, для целей OpenEmbedded (т. Е. Angstrom) вам придется написать рецепт BitBake.

Эта проблема возникла из-за необходимости поддержки устаревших систем. Использование Embedded Qt не было вариантом. Для новых проектов я настоятельно рекомендую использовать Embedded Qt.

...