Qt встроенная ошибка компиляции.исправление "Ошибка: нет такой инструкции" Ошибка - PullRequest
5 голосов
/ 14 ноября 2011

Я пытаюсь скомпилировать qt 4.7.4, используя цепочку инструментов angstrom, установленную в / home / user / Software для платы beagle.

Я получаю ошибку:

/ corelib / arch / qatomic_arm.h: 131: Ошибка: нет такой инструкции: `swpb% al,% dl, [% esi] '

Мой файл qmake.conf выглядит следующим образом:

#
# qmake configuration for building with arm-none-linux-gnueabi-g++
#

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

# modifications to g++.conf
QMAKE_CC                = arm-angstrom-linux-gnueabi-gcc
QMAKE_CXX              = arm-angstrom-linux-gnueabi-g++
QMAKE_LINK              = arm-angstrom-linux-gnueabi-g++
QMAKE_LINK_SHLIB        = arm-angstrom-linux-gnueabi-g++

# modifications to linux.conf
QMAKE_AR                = arm-angstrom-linux-gnueabi-ar cqs
QMAKE_OBJCOPY          = arm-angstrom-linux-gnueabi-objcopy
QMAKE_STRIP            = arm-angstrom-linux-gnueabi-strip

QMAKE_LIBDIR_QT        = /usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/${libdir}
QMAKE_MOC              = /usr/local/angstrom/arm/bin/moc4
QMAKE_UIC              = /usr/local/angstrom/arm/bin/uic4
QMAKE_UIC3              = /usr/local/angstrom/arm/bin/uic34
QMAKE_RCC              = /usr/local/angstrom/arm/bin/rcc4
QMAKE_QDBUSCPP2XML      = /usr/local/angstrom/arm/bin/qdbuscpp2xml4
QMAKE_QDBUSXML2CPP      = /usr/local/angstrom/arm/bin/qdbusxml2cpp4

QMAKE_INCDIR          = /usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/include
QMAKE_LIBDIR          = /usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/lib
QMAKE_INCDIR_X11      = /usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/usr/include
QMAKE_LIBDIR_X11      = /usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/usr/lib
QMAKE_INCDIR_QT      = $$[QT_INSTALL_HEADERS]
QMAKE_LIBDIR_QT      = $$[QT_INSTALL_LIBS]
QMAKE_INCDIR_OPENGL  = /usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/usr/include
QMAKE_LIBDIR_OPENGL  = /usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/usr/lib
QMAKE_INCDIR_OPENGL_ES1 = $$QMAKE_INCDIR_OPENGL
QMAKE_LIBDIR_OPENGL_ES1 = $$QMAKE_LIBDIR_OPENGL
QMAKE_INCDIR_OPENGL_ES2 = $$QMAKE_INCDIR_OPENGL
QMAKE_LIBDIR_OPENGL_ES2 = $$QMAKE_LIBDIR_OPENGL
QMAKE_INCDIR_EGL      =
QMAKE_LIBDIR_EGL      =
QMAKE_INCDIR_OPENVG  =
QMAKE_LIBDIR_OPENVG  =


load(qt_config)

моя команда настройки ниже

./configure -embedded arm -prefix /home/thwijeth/Software/qt-4.7.4-embedded -xplatform qws/linux-arm-gnueabi-g++ -fast -little-endian -opensource

Может кто-нибудь выяснить, почему это происходит?

Ответы [ 3 ]

4 голосов
/ 14 ноября 2011

Некоторые Googling предлагают следующее:

BeagleBoard использует процессор TI OMAP 3530 , который использует набор инструкций ARMv7 (согласно Wikipedia ).

На веб-сайте ARM предполагается, что инструкция swpb устарела (и по умолчанию отключена) с момента ARMv6:

ARMv6 и более поздних версий с использованием SWP и SWPB.Многопроцессорные расширения ARMv7 вводят бит SW в регистр управления системой CP15.На процессорах, которые реализуют эти расширения, после включения питания или сброса программное обеспечение должно установить этот бит на 1, чтобы разрешить использование инструкций SWP и SWPB.

A отчет об ошибках подробнее:

Атомика "универсального плеча" в src / arch / corelib / qatomic_arm.h использует инструкции swp и swpb.Это несовместимо с Thumb-2 и не будет многоядерным, особенно для armv7.

Боюсь, это не моя основная область знаний, и у меня нет такой платыв данный момент передо мной.

Однако я советую попробовать включить бит 1010 * SW * Регистр управления системой и посмотреть, поможет ли это вам (поскольку вы не используете несколько ядер).возможно, проблемы, упомянутые в сообщении об ошибке выше, не затронут вас.)

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

Удачи!

2 голосов
/ 11 июня 2012

/ corelib / arch / qatomic_arm.h: 131: Ошибка: нет такой инструкции: `swpb% al,% dl, [% esi] '

%esi являетсярегистр x86, а al и dl также выглядят как x86 как нижняя половина 16-битного регистра ax и dx?Похоже, Qt сконфигурирован для процессора ARM, и у вас есть компилятор x86 gcc.

... возможно, удалив -fast получил конфигурацию для выбора правильного компилятора.

1 голос
/ 15 ноября 2011

на самом деле удаление -быстрого добилось цели. Таким образом, наконец использованная команда была

./configure -embedded armv7 -prefix /home/thwijeth/Software/qt-4.7.4-embedded -xplatform qws/linux-arm-gnueabi-g++ -little-endian -opensource
...