【发布时间】:2014-02-11 16:17:36
【问题描述】:
我正在尝试从源代码交叉编译 Qt 4.7.1,以下是关于我的设置的一些注意事项:
- 我的预期输出是运行 Qt 应用程序所需的共享对象库。
- 我的目标平台是 TI AM335x 处理器,它是 ARM Cortex-A8 架构。
- 我的开发平台是 x86 64 位 Ubuntu 虚拟机
我对这应该如何工作的理解是,我为我的目标平台下载了工具链(这是来自 TI 的 Linaro 工具链),我下载了 Qt 4.7.1 的源代码,我将 mkspec 设置为使用我的工具链,运行configure,然后只需要运行make/make install,我应该能够找到我告诉它安装的所有.so。然而,我在让这个想法发挥作用时遇到了很多问题。
首先我下载了 TI SDK 版本:ti-sdk-am335x-evm-06.00.00.00,它的 arm 工具位于:
[root_install_dir]/linux-devkit/sysroots/i686-arago-linux/usr/bin
我用那个目录更新了我的$PATH:
mike@mike-VirtualBox:~$ echo $PATH /home/mike/ti-sdk-am335x-evm-06.00.00.00/linux-devkit/sysroots/i686-arago-linux/usr/bin :/usr/local/Trolltech/Qt-4.8.5/bin:/home/mike/bin:/usr/lib/lightdm/lightdm: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/mike/bin
然后我根据最接近的示例创建了自己的 mkspec:
cp -R [qt_install_dir]/mkspecs/qws/linux-arm-gnueabi-g++/ [qt_install_dir]/mkspecs/qws/linux-am335x-g++
我修改了linux-am335x-g++/qmake.conf 以指向来自 TI sdk 的工具:
# modifications to g++.conf
QMAKE_CC = arm-linux-gnueabihf-gcc
QMAKE_CXX = arm-linux-gnueabihf-g++
QMAKE_LINK = arm-linux-gnueabihf-g++
QMAKE_LINK_SHLIB = arm-linux-gnueabihf-g++
# modifications to linux.conf
QMAKE_AR = arm-linux-gnueabihf-ar cqs
QMAKE_OBJCOPY = arm-linux-gnueabihf-objcopy
QMAKE_STRIP = arm-linux-gnueabihf-strip
然后我运行了一个配置命令:
./configure -prefix /home/mike/qt4.7.1_source/my_qt -embedded arm -platform qws/linux-x86_64-g++ -xplatform qws/linux-am335x-g++ -no-mmx -no-3dnow -no -sse -no-sse2 -no-glib -no-cups -no-largefile -no-accessibility -no-openssl -no-gtkstyle -fast -opensource
它运行了一段时间然后完成并说它已准备好执行make/make install 此时我运行make,这就是它开始失败的地方:
/home/mike/qt4.7.1_source/qt-everywhere-opensource-src-4.7.1/bin/moc -DQT_SHARED -DQT_BUILD_CORE_LIB -DQT_NO_USING_NAMESPACE -DQT_NO_CAST_TO_ASCII -DQT_ASCII_CAST_WARNINGS -DQT3_SUPPORT -DQT_MOC_COMPAT -DQT_USE_FAST_OPERATOR_PLUS -DQT_USE_FAST_CONCATENATION -DELF_INTERPRETER = \ “/ lib64下/ LD-Linux的x86-64.so.2 \” -DHB_EXPORT = Q_CORE_EXPORT -DQT_HAVE_NEON -DQT_NO_DEBUG -I。 ./../mkspecs/qws/linux-am335x-g++ -I。 -I../../include -I../../include/QtCore -I.rcc/release-shared-emb-arm -Iglobal -I../3rdparty/harfbuzz/src -I../3rdparty /md5 -I../3rdparty/md4 -I.moc/release-shared-emb-arm kernel/qobject.h -o .moc/release-shared-emb-arm/moc_qobject.cpp arm-linux-gnueabihf-g++ -C -include .pch/release-shared-emb-arm/QtCore -pipe -fno-exceptions -mfpu=neon -O2 -fvisibility=hidden -fvisibility-inlines-hidden -Wall -W -D_REENTRANT -fPIC -DQT_SHARED -DQT_BUILD_CORE_LIB -DQT_NO_USING_NAMESPACE -DQT_NO_CAST_TO_ASCII -DQT_ASCII_CAST_WARNINGS -DQT3_SUPPORT -DQT_MOC_COMPAT -DQT_USE_FAST_OPERATOR_PLUS -DQT_USE_FAST_CONCATENATION -DELF_INTERPRETER = \ “/ lib64下/ LD-Linux的x86-64.so.2 \” -DHB_EXPORT = Q_CORE_EXPORT -DQT_HAVE_NEON -DQT_NO_DEBUG -I ../../ mkspecs /qws/linux-am335x-g++ -I。 -I../../include -I../../include/QtCore -I.rcc/release-shared-emb-arm -Iglobal -I../3rdparty/harfbuzz/src -I../3rdparty /md5 -I../3rdparty/md4 -I.moc/release-shared-emb-arm -o .obj/release-shared-emb-arm/qobject.o kernel/qobject.cpp
{标准输入} :汇编程序消息:
{标准输入}:1294:错误:所选处理器不支持 Thumb 模式 'swp r6,r4,[r3]'
make[1] : [.obj/release-shared-emb-arm/qobject.o] 错误 1*
make[1]: 离开目录
'/home/mike/qt4.7.1_source/qt-everywhere-opensource-src-4.7.1/src/corelib'
make: * [sub-corelib-make_default-ordered] 错误 2
所以,问题...
为什么编译器抱怨不支持拇指模式?由于这是基于 ARM 的处理器的交叉编译工具链,因此应该支持它。事实并非如此,这让我觉得make 以某种方式选择了错误的 g++ 版本。
对出了什么问题以及如何解决此问题有任何想法吗?
【问题讨论】: