我正在尝试从源代码交叉编译QT4.7.1,下面是关于我的设置的一些注意事项:
我对它应该如何工作的理解是,我下载了目标平台的工具链(这是来自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中的工具:
# 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++版本。
关于哪里出了问题以及如何解决这个问题,有什么想法吗?
发布于 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文件中添加了一些命令行选项:
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命令之外:
-no-pch这是为了避免有关:.pch目录和显示“无此类文件或目录”的文件的错误。
https://stackoverflow.com/questions/21268833
复制相似问题