2013-12-20 39 views
2

我想编译ARM设备的Qt程序。无法编译用于ARM设备的Qt程序

我安装了ARM的工具链,这里是我的qmake.conf文件看起来像:

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

include(../../common/linux.conf) 
include(../../common/gcc-base-unix.conf) 
include(../../common/g++-unix.conf) 
include(../../common/qws.conf) 

# modifications to g++.conf 
QMAKE_CC    = arm-linux-gnueabi-gcc 
QMAKE_CXX    = arm-linux-gnueabi-g++ 
QMAKE_LINK    = arm-linux-gnueabi-g++ 
QMAKE_LINK_SHLIB  = arm-linux-gnueabi-g++ 
QMAKE_CFLAGS += -O3 -march=armv5te 
QMAKE_CXXFLAGS += -O3 -march=armv5te 
QMAKE_INCDIR_QT = /opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/include 
QMAKE_INCDIR_QT = /usr/share/qt4/include 
QMAKE_LIBDIR_QT = /opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib 


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

load(qt_config) 

的问题是,如果我有(如上图所示):

QMAKE_INCDIR_QT = /opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/include 
QMAKE_INCDIR_QT = /usr/share/qt4/include 
QMAKE_LIBDIR_QT = /opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib 

我得到一个错误,指出:

main.cpp:1:30: fatal error: QtGui/QApplication: No such file or directory 

如果我排除:

QMAKE_INCDIR_QT = /opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/include 
QMAKE_LIBDIR_QT = /opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib 

我得到一个错误,指出:

/usr/include/qt4/QtCore/qatomic_x86_64.h:133:29: error: impossible constraint in ‘asm’ 

我是新来这个和这个星期一直在努力了40个小时,并不能找到什么问题。

我可以为ARM设备编译一个简单的C++程序,但是当我尝试使用Qt时,我得到了上述错误,所以我认为问题出在一种情况下,Qt头文件没有加载,使用从C++到asm的错误转换器文件。

+1

你为什么不使用现有的规格? Qt本身是否支持某些特定的ARM?您是否尝试过'qmake -spec linux-arm-gnueabi-g ++'而不使用您的自定义ARM设置? – lpapp

+0

感谢您的回复。这没什么特别,但是我发现我应该编译这些,所以我就是这么做的。 –

+0

试着放下你的工作,并使用内置的qmake mkspecs支持它。让我知道这个试验的结果。 – lpapp

回答

0

我设法编译它,问题是我在安装Qt嵌入时使用了错误的选项./configure。从头开始后,它没有问题。

的选项用于: ./configure -opensource -confirm-license -no-pch -embedded arm -platform qws/linux-x86_64-g++ -xplatform linux-arm-gnueabi-g++ -little-endian -no-webkit

2

刚刚阅读该消息,qatomic_x86_64.h在ARM构建中颇为可疑。这显然是错误的工具链。所以,你绝对需要第一个语句来选择ARM工具链。

但是,我不确定你为什么要修复缺少的include的方法是删除更多的include目录。我也不明白为什么假设Qt 缺失,当错误明确地在标头包含。

就我所见,唯一的问题是QtGui\是一个相对路径,在任何QMAKE_INCDIR_QT目录中都找不到。你的QtGui包括目录在哪里?

+0

感谢您的回复。我的QtGui位于/ usr/share/qt4/include –

+0

@NAlex:这可能是'x86_64'工具链中的QtGui。 – MSalters

+0

是的,可能,但我无法在Qt中找到另一个包含目录。在QtCore目录中,我可以看到多个头文件,如:qatomic_arm.h,qatomic_i386.h,qatomic_x86_64.h等等。所以我认为它们都在那里,但Qt使用了错误的头文件。 –