首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从源代码到ARM编译QT4.7的问题

从源代码到ARM编译QT4.7的问题
EN

Stack Overflow用户
提问于 2014-01-21 20:50:23
回答 1查看 4.1K关注 0票数 4

我正在尝试从源代码交叉编译QT4.7.1,下面是关于我的设置的一些注意事项:

  1. 我的预期输出是运行Qt应用程序所需的共享对象库。
  2. 我的目标平台是一个TI AM335x处理器,它是ARM的Cortex-A8架构.
  3. 我的开发平台是x86 64位Ubuntu虚拟机。

我对它应该如何工作的理解是,我下载了目标平台的工具链(这是来自TI的利纳罗工具链),我下载了Qt 4.7.1的源代码,我将mkspec设置为使用我的工具链,运行configure,然后只需要运行make/make install,我应该能够找到我告诉它要安装的所有.so。但是,要让这个想法生效,我遇到了很多问题。

首先,我下载了TI SDK版本: ti-sdk-am335x-evm-06.00.00.00,其中包含arm工具的at:[root_install_dir]/linux-devkit/sysroots/i686-arago-linux/usr/bin

我用这个目录更新了我的$PATH

mike@:~$ echo /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中的工具:

代码语言:javascript
复制
# 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

然后我运行了一个配置命令:

./配置-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 -source 2 -no-glib --platform-cups -no-largefile -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-DHB_EXPORT=Q_CORE_EXPORT -DQT_HAVE_NEON -DQT_NO_DEBUG -I. /./mkspecs/qws/linux-AM335x-g++-I。-I./包括-i./包括/QtCore-I.rcc/release共享-emb-arm -Iglobal -i./3 3rdparty/harfbuzz/src-i./3 3rdparty/md5-i./3 3rdparty/md4-I.moc/release共享-emb-arm内核/qobject.h -o .moc/-o-共享-emb-arm/moc_qobject.cpp-linux-gnueabihf-g+ -c -include ..pch/-include共享-emb-arm/QtCore-管道-fno-例外情况-mfpu=neon -O2 -fvisibility=hidden -fvisibility-内联-隐藏的-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 -O2 -DHB_EXPORT=Q_CORE_EXPORT -DQT_HAVE_NEON -DQT_NO_DEBUG -I. /./mkspecs/qws/linux-AM335x-g++-I。-I././包括-I./包括/QtCore-I.rcc/release共享-emb-arm -Iglobal -i./3 3rdparty/harfbuzz/src-i./3 3rdparty/md5-i./3 3rdparty/md4-I.moc/release共享-emb-arm -o ..obj/release共享-emb-arm/qobject.o内核/qobject.cpp {标准输入}:汇编程序消息: {标准输入}:1294:错误:选定的处理器不支持拇指模式'swp r6,r4,r3' make1 ..obj/版本-共享-emb-arm/qobject.o错误1* make1:离开目录 '/home/mike/qt4.7.1_source/qt-everywhere-opensource-src-4.7.1/src/corelib‘ make:*子corelib_default-ordered 2

所以问题是..。为什么编译器抱怨拇指模式不受支持?因为这是一个用于ARM处理器的交叉编译工具链,所以应该支持它。事实上,它并没有让我觉得make在某种程度上采用了错误的g++版本。

关于哪里出了问题以及如何解决这个问题,有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2014-01-22 19:47:44

usr的答案是:无艺术噪音实际上解决了我的问题,但由于我想确保自己(如果需要)或其他人有非常清晰的线索,我想确切地说明修复的是什么:

首先,我将.configure命令更新为:

./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 -opensource -qt-mouse-tslib

与问题的配置命令的唯一区别是删除-fast选项。

然后在LinuxAM335x-g++/qmake.conf文件中添加了一些命令行选项:

代码语言:javascript
复制
QMAKE_CFLAGS= -march=armv7-a -marm -mthumb-interwork -mfloat-abi=hard -mfpu=neon -mtune=cortex-a8
QMAKE_CXXFLAGS= -march=armv7-a -marm -mthumb-interwork -mfloat-abi=hard -mfpu=neon -mtune=cortex-a8

通过这两个更改,我现在可以看到一切都成功地构建和安装了Qt4.7.1。

我还尝试了Qt4.8.5,所有操作都是一样的,除了必须将另一个选项添加到./configure命令之外:

代码语言:javascript
复制
-no-pch

这是为了避免有关:.pch目录和显示“无此类文件或目录”的文件的错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21268833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档