看到这篇文章的朋友,应该对Qt的移植有过初步的了解,那么废话不多说了,下面进入正题:
Step 1:
-------
修改编译配置文件,在目录:qt-everywhere-opensource-src-5.5.0/qtbase/mkspecs/linux-arm-gnueabi-g++/下面qmake.conf.
改为:
#
# qmake configuration for building with arm-linux-gnueabi-g++
#
MAKEFILE_GENERATOR = UNIX
CONFIG += incremental
QMAKE_INCREMENTAL_STYLE = sublib
QT_QPA_DEFAULT_PLATFORM = linuxfb
#此处网上有朋友误导我了,在此我更正!
QMAKE_CFLAGS_RELEASE += -O2 -march=armv7-a
#cortex-A8
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv7-a
include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
modifications to g++.conf
QMAKE_CC = arm-linux-gcc#此处需要根据开发者电脑具体配置而定,网上很多资料都只说写什么,没说为什么这么写,我在这里说说,详细请问注释1.
QMAKE_CXX = arm-linux-g++
QMAKE_LINK = arm-linux-g++
QMAKE_LINK_SHLIB = arm-linux-g++
modifications to linux.conf
QMAKE_AR = arm-linux-ar cqs
QMAKE_OBJCOPY = arm-linux-objcopy
QMAKE_NM = arm-linux-nm -P
QMAKE_STRIP = arm-linux-strip
load(qt_config)
Step 2:
-------
qt3d和qtcanvas3d在编译的时候会报错,说是未识别模块,而且我的开发板是三星的S5PV210,原厂没有提供opengl,识别了也会报错,导致编译失败,而且编译配置参数里面也没有这两个模块的配置。
做法是在配置时参数加-no-opengl,然后打开qt-everywhere-opensource-src-5.5.0/qt.pro文件,找到:
addModule(qt3d, qtdeclarative qtimageformats)
addModule(qtcanvas3d, qtdeclarative)
这两行用#号注释,或者直接删掉。如果不注释掉,即使加了-no-opengl也会报错,导致编译失败。
Step 3:
-------
Qt-5.5.0的configure选项向来能让新手头疼好久.我用的选项如下:
./configure
-release
opensource
-confirm-license
-plugin-sql-sqlite
-xplatform linux-arm-gnueabi-g++
#在这个文件夹里发现的.\qtbase\mkspec\linux-arm-gnueabi-g++
这个文件夹里的子文件夹名字就是对应一种目标设备名
-no-opengl
-no-dbus
#一开始没有加上,导致部署程序时出错
-no-c++11
-no-tslib
-qt-libjpeg
-qt-libpng
-qt-zlib
-prefix /usr/local/Trolltech/Qt-5.5.0-ARM/
具体选项什么意思可以通过./configure --help查看
注意:此处我加上了 -no-tslib,表示不把tslib作为input库,此时触摸屏默认以evdev作为input库,所以移植完过后在开发板的/etc/profile文件中添加:
export QT_QPA_GENERIC_PLUGINS=evdevtouch:/dev/event0
如果还用tslib,那么就该写成:
export QT_QPA_GENERIC_PLUGINS=tslib:/dev/event0
我第一次接触Qt库移植时,都是参考网上前辈的方法.但为什么前辈能找到配置的方法和开发板有关QPA(Qt-4年代是QWS)参数的设定呢,其实这在Qt的帮助文档里能找到的:在帮助文档里搜索Qt for embeded Linux就能看到相关参数设定了.
Step 4:
-------
熟悉的make $$ sudo make install
Step 5:
-------
拷贝lib,plugins,import到开发板.大功告成!
说好的注释一请看下面:
笔者的电脑时Ubuntu14.04,安装的时友善之臂的arm-linux-gcc chaintool,环境变量也已经配置了,而且笔者在/usr/bin/下,新建了arm-linux-ar;arm-linux-g++;arm-linux-gcc;arm-linux-objcopy;arm-linux-objdump;arm-linux-ranlib;arm-linux-strip这些链接文件.换句话说,在终端里,输入arm-linux-gcc -v有对应的输出.所以再上面写arm-linux-gcc等.
最后给新手普及点Qt5移植前后的知识,我也是从帮助文档里看来的,直接用英文了,原汁原味,括号里我自己添加的:
1.The windowing system dependent parts of Qt (QWS)have been completely rewritten for Qt 5, based on the Qt Platform Abstraction(QPA), a plugin architecture which allows Qt to dynamically load a windowing system integration based on what system it is running on.
//QPA is a plugin architecture
2.
-platform platformName[:options], specifies the Qt Platform Abstraction (QPA) plugin.
Overridden by the QT_QPA_PLATFORM environment variable.
-platformpluginpath path, specifies the path to platform plugins.
Overridden by the QT_QPA_PLATFORM_PLUGIN_PATH environment variable.
-platformtheme platformTheme, specifies the platform theme.
Overridden by the QT_QPA_PLATFORMTHEME environment variable.
-plugin plugin, specifies additional plugins to load. The argument may appear multiple times.
Overridden by the QT_QPA_GENERIC_PLUGINS environment variable.
需要注意的是:环境变量会将命令行参数覆盖!
转载请注明出处,谢谢!