移植Qt-5.5.0到ARM Cortex-A8

看到这篇文章的朋友,应该对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.

需要注意的是:环境变量会将命令行参数覆盖!



转载请注明出处,谢谢!

你可能感兴趣的:(心得)