官网上找QT下载源码的地方真是麻烦,为了推广还得让你注册填写选项什么的,幸好以前有人分享过地址。直接去download.qt.io/official_releases/qt/下载就可以了。
当我还在想编译5.5.0的时候,5.6.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=armv5te #QMAKE_CFLAGS_RELEASE += -O2 -march=armv7-a #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 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)我现在用的芯片的ARM核版本是armv5的。
解压完源码后, ./configure --help出来一大堆选项。为了不放过一个小选项,我都看了一下,把大部分选项都放到了我的Build.sh中,虽然不太懂有些选项是干嘛的。这样,编译就出问题了。
其中一个是qqmldebuger什么的在ld链接时提示一个qqml xxxxxx () 函数未实现。一开始没注意,去源码找这个东西,找到了相关的,但没有完整的。后来仔细一看,qml debug,我可以不用,就用-no-qml-debug关闭qml debug的编译。
../configure \ -release \ -opensource -confirm-license \ -no-c++11 -shared -static \ -no-sse2 -no-sse3 -no-ssse3 -no-sse4.1 -no-sse4.2 -no-avx -no-avx2 \ -no-mips_dsp -no-mips_dspr2 \ -I$TSLIB/include -L$TSLIB/lib \ -no-pkg-config \ -qt-zlib -no-mtdev \ -qt-sql-sqlite \ -qt-libpng -qt-libjpeg -qt-freetype -qt-harfbuzz \ -no-openssl -no-xinput2 -no-xcb-xlib -no-glib \ -no-qml-debug \ -nomake examples -make libs \ -nomake tools -nomake tests \ -gui -widgets \ -optimized-qmake -no-nis -no-cups -no-iconv \ -tslib -no-icu -no-fontconfig -strip \ -no-pch -no-dbus \ -force-asserts \ -no-xcb -no-directfb -linuxfb -no-kms \ -qpa linux \ -xplatform linux-arm-gnueabi-g++ \ -no-opengl -libinput \ -no-gstreamer -no-system-proxies \ -prefix $(pwd)/../../qt5.6.0 -v
写到这里,源码还在编译中,现看看QT5相对于QT4的变化,对于嵌入式最大的就是QPA替代了QWS。
"
需要说明的是,Qt5.0开始,Qt自身不再单独实现窗口系统,QWS不复存在,取而代之的新机制是QPA(Qt平台抽象),QPA使得Qt对不同平台的支持变得更加灵活,当需要支持一个新平台时,只需为该平台编写一个QPA插件。
With the release of Qt 5.0, Qt no longer contains its own window system implementation: QWS is no longer a supported platform. For single-process use cases, theQt Platform Abstraction is a superior solution......参考 http://qt-project.org/doc/qt-5/embedded-linux.html
编译完Qt后,只需将生成的lib和plugins文件夹拷贝到开发板,另外,当在嵌入式Linux平台上运行应用程序前,应根据自己平台的实际情况提前设置好下面几个环境变量:
然后就可以运行Qt程序了
以前Qt4的程序在嵌入式Linux平台运行时,需要在命令行输入-qws选项以启动Qt窗口系统服务,如" ./HelloWorld -qws";而使用Qt5后,不再需要-qws,而需要通过-platform来指定要使用的QPA插件,如" ./HelloWorld -platform linuxfb",如果不指定,则用默认的QPA插件,默认的QPA插件通过上面的QT_QPA_PLATFORM变量指定。
"
现在的我依然还停留在QT4时代,所以这里把上面的这部分摘抄到这里,提醒自己QT5时代的特性。
-static -shared都存在时只静态编译?只生成了.a。哎,那就去掉-static
../configure \ -release \ -opensource -confirm-license \ -no-c++11 -shared \ -no-sse2 -no-sse3 -no-ssse3 -no-sse4.1 -no-sse4.2 -no-avx -no-avx2 \ -no-mips_dsp -no-mips_dspr2 \ -I$TSLIB/include -L$TSLIB/lib \ -no-pkg-config \ -qt-zlib -no-mtdev \ -qt-sql-sqlite \ -qt-libpng -qt-libjpeg -qt-freetype -qt-harfbuzz \ -no-openssl -no-xinput2 -no-xcb-xlib -no-glib \ -no-qml-debug \ -nomake examples -make libs \ -nomake tools -nomake tests \ -gui -widgets \ -optimized-qmake -no-nis -no-cups -no-iconv \ -tslib -no-icu -no-fontconfig -strip \ -no-pch -no-dbus \ -force-asserts \ -no-xcb -no-directfb -linuxfb -no-kms \ -linuxfb -no-egl -no-eglfs -no-directfb -no-opengl \ -xplatform linux-arm-gnueabi-g++ \ -libinput \ -no-gstreamer -no-system-proxies \ -prefix $(pwd)/../../qt5.6.0 -v
USB鼠标还是不行,还得重新配置编译。见《QT5.6.0鼠标支持》一文,链接:
http://blog.csdn.net/fu851523125/article/details/51035929
configure部分选项解释
Qt Configure Options: http://qt-project.org/doc/qt-5/configure-options.html
1. Opengl图形程序接口
2. opengl es是 OpenGL三维图形 API的子集,针对手机、PDA和游戏主机等嵌入式设备而设计
3. dbus: (进程间通信机制)
4. ALSA高级(Linux声音架构)
5. FontConfig提供系统范围内字体设置
6. FreeType字体引擎
7. Iconv多种国际编码格式之间进行文本内码的转换
8. ICU (Unicode支持,软件国际化) QtWebkit requires ICU support to be present
9. cups: sudo apt-get install cups foomatic-db system-config-printer (unix打印服务)
10. mtdev触摸屏多点触摸协议
11. openssl 为网络通信提供安全及数据完整性的一种安全协议,加密
12. XCB libxcb provides an interface to the X Window System protocol, slated toreplace the current Xlib interface
13. LinuxFB Framebuffer[1]是用一个视频输出设备从包含完整的帧数据的一个内存缓冲区中来驱动一个视频显示设备