Qt嵌入式编译错误。修复“错误:没有这样的指令”错误

时间:2011-11-14 10:49:51

标签: qt embedded cross-compiling

我正在尝试使用安装在/ home / user / Software的angstrom工具链来编译qt 4.7.4 for beagle board。

我收到的错误是:

  

/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 个答案:

答案 0 :(得分:4)

一些谷歌搜索建议如下:

BeagleBoard使用TI的OMAP 3530处理器,该处理器使用ARMv7指令集(根据Wikipedia)。

The ARM website表明自ARMv6以来,swpb指令已被弃用(默认情况下已禁用):

  

ARMv6及更高版本使用SWP和SWPB弃用。 ARMv7的多处理器扩展在CP15系统控制寄存器中引入了SW位。在实现这些扩展的处理器上,上电或复位后,软件必须将此位设置为1才能使用SWP和SWPB指令。

bug report详细介绍:

  

src / arch / corelib / qatomic_arm.h中的“generic arm”原子使用swpswpb指令。这与Thumb-2不兼容,并且不会是多核安全的,特别是对于armv7。

我担心这不是我的核心专业领域,而且我目前还没有这样的董事会。

我的建议是尝试启用System Control Register SW bit并查看是否有助于您(看到您没有使用多个核心,也许上面的错误报告中提到的问题不会影响您)。

或者,this patch似乎可以通过使用其他方法模拟问题说明为您提供另一条路径。

祝你好运!

答案 1 :(得分:2)

  

/corelib/arch/qatomic_arm.h:131:错误:没有这样的指令:`swpb%al,%dl,[%esi]'

%esi是一个x86寄存器,aldl也是x86,看起来是16位ax和dx寄存器的下半部分?我看起来喜欢Qt配置为ARM处理器,你有x86 gcc编译它。

...可能正在删除-fast让配置选择正确的编译器。

答案 2 :(得分:1)

实际上删除-fast做了伎俩。所以最终使用的命令是

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