Qt嵌入式编译错误。“固定”;错误:无此类指示“;错误

Qt嵌入式编译错误。“固定”;错误:无此类指示“;错误,qt,embedded,cross-compiling,Qt,Embedded,Cross Compiling,我正在尝试使用安装在/home/user/Software中的angstrom工具链为beagle board编译Qt4.7.4 我收到的错误是: /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

我正在尝试使用安装在/home/user/Software中的angstrom工具链为beagle board编译Qt4.7.4

我收到的错误是:

/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命令

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

有人能找出为什么会发生这种情况吗?

一些谷歌搜索建议如下:

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

表明
swpb
指令自ARMv6:

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

A更详细地介绍:

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

恐怕这不是我的核心专业领域,我目前还没有这样的董事会

然而,我的建议是尝试启用,看看这是否对您有帮助(因为您没有使用多个内核,也许上面的bug报告中提到的问题不会影响您)

或者,看起来它可以通过使用其他方法模拟问题指令为您提供另一条路径


祝你好运

事实上,取消了禁食就成功了。所以最后使用的命令是

./configure -embedded armv7 -prefix /home/thwijeth/Software/qt-4.7.4-embedded -xplatform qws/linux-arm-gnueabi-g++ -little-endian -opensource
/corelib/arch/qatomic_arm.h:131:错误:没有这样的指令:`swpb%al,%dl,[%esi]'

%esi
是一个x86寄存器,
al
dl
也是16位ax和dx寄存器的下半部分?我觉得Qt是为ARM处理器配置的,您有x86 gcc编译它


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

您是否获得有关错误的更多详细信息,如行号?是的。确切的错误是…/../include/QtCore/../src/corelib/arch/qatomic_arm.h:131:错误:没有此类指令:
swpb%dl,%al,[%esi]'make[1]:***[obj/release shared emb arm/qabstractanimation.o]错误1 make[1]:离开目录
/home/thwijeth/Software/qt repo/qt/src/corelib'make:**[sub-corelib-make\u default-ordered]错误2等待回复。但如果我记得正确,thumb补丁已包含在qt中,并将随qt 4.8一起发布。这不是我的错误原因,我会让您知道它是如何发生的。代码目前正在编译,但不确定是否完全完成,这表明可以在configu中指定指令集关于参数。我想看看将您的命令更改为
/configure-embedded
armv7
-prefix/home/thwijeth/Software/qt-4.7.4-embedded-xplatform qws/linux-arm-gnueabi-g++-fast-little-endian-opensource
是否会有所不同……此外:似乎与您的目标相同哦,并且已经编写了一些指令。可能您想要的是
-Ofast
,而不是
-fast
。这就是
-O3-ffast math
。您通常希望在启用优化的情况下编译。@PeterCordes在这种情况下,
-fast
是一个Qt配置脚本选项,用于不缓存某些信息。看起来它忽略了目标compiler和使用主机编译器。