Qt嵌入式编译错误.修复"错误:没有这样的指令"错误

Tha*_*nga 5 embedded qt 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)
Run Code Online (Sandbox Code Playgroud)

我的configure命令如下

./configure -embedded arm -prefix /home/thwijeth/Software/qt-4.7.4-embedded -xplatform qws/linux-arm-gnueabi-g++ -fast -little-endian -opensource
Run Code Online (Sandbox Code Playgroud)

有人能弄清楚为什么会这样吗?

sam*_*m-w 4

一些谷歌搜索建议如下:

BeagleBoard 采用 TI 的OMAP 3530处理器,该处理器采用 ARMv7 指令集(根据维基百科)。

ARM 网站表明swpb自 ARMv6 以来该指令已被弃用(默认情况下禁用):

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

错误报告更详细:

src/arch/corelib/qatomic_arm.h 中的“通用arm”原子使用swpswpb指令。这与 Thumb-2 不兼容,并且不具有多核安全性,尤其是对于 armv7。

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

不过,我的建议是尝试启用系统控制寄存器 SW 位,看看这是否对您有帮助(鉴于您没有使用多个内核,也许上面的错误报告中提到的问题不会影响您)。

或者,这个补丁看起来可以通过使用替代方法模拟问题说明来为您提供另一条路线。

祝你好运!

  • [此论坛帖子](http://developer.qt.nokia.com/forums/viewthread/7304)建议可以在“configure”参数中指定指令集。我有兴趣看看是否将命令更改为 `./configure -embedded` **`armv7`** `-prefix /home/thwijeth/Software/qt-4.7.4-embedded -xplatform qws/linux-arm -gnueabi-g++ -fast -little-endian -opensource` 会有什么不同...... (2认同)