这个手记写到这儿,am335x的软件渠道现已可以正常作业了, tslib也现已可以进行正确的触摸屏校对,自己编写一个hello world的程序,并穿插编译后,可以在am335x上运转,并在超级终端上打印出“hello world”。
那么,咱们正式开端建立qt的开发渠道,我的ubuntu上装置的是qt5.4.1,并现已写了一个hello world的qt程序,这个程序十分简略,便是运转后在桌面上显现一个窗口,窗口中显现一行文字“hello world”,以及一个按键。鼠标点击按键退出程序。
ubuntu的qt装置在/home/XXXX/qt5.4.1目录下,QtCreator也装置在相同目录下,上述的qtdemo程序用QtCreator创立并编译经过。
为确保和ubuntu渠道的一致性,决议am335x的渠道移植qt5.4.1,首先到qt的官网下载源代码:http://download.qt.io/official_releases/qt/5.4/5.4.1/single/qt-everywhere-opensource-src-5.4.1.tar.gz。下载可以运用git,也可以用浏览器直接翻开这个衔接。将下载到的压缩文件解压缩到./source目录下,进入到./source目录下履行configure东西生成编译选项,这儿要进行三步作业:
A、设置穿插编译的环境变量。这儿需求留意一点,咱们在穿插编译qt5.4.1的东西包时,涉及到2种不同的编译:第一种是运用ubuntu装置的GCC和G++编译qmake东西,这些qmake东西将运转在ubuntu下,用于将后续自己编写的qt应用程序的源代码编译成可以运转在arm渠道上的方针可履行程序;第二种是运用arm-linux-gnueabihf编译器,将qt5.4.1的库编译成运转于arm渠道的静态库或许同享库。
export QT_INSTALL_DIR=/home/XXXX/Qt541arm #设定编译好的qt包的装置途径
export ARCH=arm #设定方针cpu架构
export LIBRARY_PATH=$LIBRARY_PATH:/usr/lib/i386-linux-gnu #为后续的编译设定库途径
B、修改./qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf。mkspecs目录下有许多的保存.conf文件的目录,别离对应不同的操作体系和穿插编译渠道,我这儿运用linux-arm-gnueabi-g++渠道的装备文件进行穿插编译。
MAKEFILE_GENERATOR = UNIX
CONFIG += incremental gdb_dwarf_index
QMAKE_INCREMENTAL_STYLE = sublib
include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
QT_QPA_DEFAULT_PLATFORM=linuxfb
COMPILER_FLAGS += -o3 -march=armv7-a -mtune=cortex-a8 -mfpu=vfpv3 -mfloat-abi=hard
QMAKE_CFLAGS_RELEASE += -O3 -march=armv7-a -mtune=cortex-a8 -mfpu=vfpv3 -mfloat-abi=hard
QMAKE_CXXFLAGS_RELEASE += -O3 -march=armv7-a -mtune=cortex-a8 -mfpu=vfpv3 -mfloat-abi=hard
QT_INSTALL_DIR = /home/XXXX/Qt541arm
QMAKE_INCDIR += /usr/tslib/include
QMAKE_LIBDIR += /usr/tslib/lib
LIBS += -ldl -fPIC -lts
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++
QMAKE_AR = arm-linux-gnueabihf-ar cqs
QMAKE_OBJCOPY = arm-linux-gnueabihf-objcopy
QMAKE_NM = arm-linux-gnueabihf-nm -P
QMAKE_STRIP = arm-linux-gnueabihf-strip
load(qt_config)
一定要正确设置QMAKE_INCDIR和QMAKE_LIBDIR,指向正确的编译后tslib装置目录下的include和lib目录。不然穿插编译qt5.4.1时会呈现找不到头文件的过错。
LIBS的几个设置比较重要,-lts是在后续的穿插编译应用时添加tslib库。-fPIC用于在编译时出产方位无关代码,-ldl设置用显现办法调用相关的函数调用。
这儿额定提一句,穿插编译器中有一个东西arm-linux-gnueabihf-readelf,十分有用,运用这个东西可以检查应用程序的可履行文件的各种信息,例如运用arm-linux-gnueabihf-readelf -d qtdemo,可以检查qtdemo中包括并运用哪一些同享库。
C、履行./configure进行装备:
我修改了一个sh文件,用于进行装备,这样便利后续运用:
#!/bin/sh
./configure -v \
-release \
-opensource \
-confirm-license \
-make libs \
-optimized-qmake \
-platform linux-g++ \
-xplatform linux-arm-gnueabi-g++ \
-prefix /home/XXXX/Qt541arm \
-pch \
-qt-libjpeg \
-qt-libpng \
-qt-zlib \
-qt-sql-sqlite \
-tslib \
-qreal float \
-linuxfb \
-no-evdev \
-no-egl \
-no-eglfs \
-no-opengl \
-no-directfb \
-no-sql-db2 \
-no-sql-ibase \
-no-sql-mysql \
-no-sql-oci \
-no-sql-odbc \
-no-sql-psql \
-no-sql-sqlite2 \
-no-sql-tds \
-no-xcb \
-no-xcb-xlib \
-no-icu \
-no-c++11 \
-no-cups \
-no-iconv \
-no-android-style-assets \
-nomake examples \
-nomake tests \
这儿要点当地是:
1、用-platform指定穿插编译的渠道,这个是过错的,这个选项是指定编译qmake东西的渠道,因为我的qmake是需求运转在ubuntu上,所以这个选项指定的qmake.conf中有必要将编译东西指向ubuntu的GCC和G++;
而-xplatform才是指定同享库等,以及终究的qt应用程序的运转渠道的。-xplatform告知configure运用哪一个穿插编译东西编译qt5.4.1开发包的lib。这个选项指定的qmake.conf中有必要将编译东西指向arm的穿插编译东西,并设定相关的编译选项。
2、第一次编译好arm的qt5.4.1开发包,并将这个qt5.4.1开发包中的lib和plugins目录下的内容悉数拷贝到arm方针渠道的nfs文件体系中的/opt/qt541arm目录中。用这个包的qmake编译我的qtdemo程序,然后将可履行文件拷贝到arm板的nfs文件体系中。正确设定运转环境后,运转qtdemo犯错,提示could not
find or load a platform。不能翻开显现渠道,这个过错我大约花了2天时刻,后来发现要害在上面的configure时,假如运用了-linuxfb,则有必要-no-egl,-no-eglfs,-no-directfb,-no-opengl将其他的显现渠道封闭,要不然后续编译qtdemo并运转时,就会呈现不能找到或许装载显现渠道,有效地显现渠道是:……的过错。
当然,运转qt应用程序之前,需求确保你的qt的运转环境变量设置是正确的。运用上述的configure成功装备好编译环境后,最终应该显现出qt5.4.1开发包的包括项,以及编译后的装置方位等:
Building on: linux-g++ (i386, CPU features: none detected)
Building for: linux-arm-gnueabi-g++ (arm, CPU features: none detected)
qmake vars ………. styles += mac fusion
windows DEFINES += QT_NO_MTDEV DEFINES += QT_NO_EVDEV sql-drivers = sqlite sql-plugins = qmake switches ………
Build options:
Configuration ………. accessibility alsa audio-backend clock-gettime
clock-monotonic compile_examples concurrent cross_compile dbus eventfd freetype
full-config getaddrinfo getifaddrs harfbuzz inotify ipv6ifname large-config
largefile libudev linuxfb medium-config minimal-config mremap nis no-pkg-config openssl pcre png
posix_fallocate precompile_header qpa qpa reduce_exports release rpath shared
small-config tslib zlib
Build parts ………… libs
Mode ………………. release
Using C++11 ………… no
Using gold linker……. no
Using PCH ………….. yes
Target compiler supports:
Neon …………….. no
Qt modules and options:
Qt D-Bus …………… yes (loading dbus-1 at runtime)
Qt Concurrent ………. yes
Qt GUI …………….. yes
Qt Widgets …………. yes
Large File …………. yes
QML debugging ………. yes
Use system proxies ….. no
Support enabled for:
Accessibility ………. yes
ALSA ………………. yes
CUPS ………………. no
Evdev ……………… no
FontConfig …………. no
FreeType …………… yes (bundled copy)
Glib ………………. no
GTK theme ………….. no
HarfBuzz …………… yes (bundled copy)
Iconv ……………… no
ICU ……………….. no
Image formats:
GIF ……………… yes (plugin, using bundled copy)
JPEG …………….. yes (plugin, using bundled copy)
PNG ……………… yes (in QtGui, using bundled copy)
journald …………… no
mtdev ……………… no
Networking:
getaddrinfo ………. yes
getifaddrs ……….. yes
IPv6 ifname ………. yes
OpenSSL ………….. yes (loading libraries at run-time)
NIS ……………….. yes
OpenGL / OpenVG:
EGL ……………… no
OpenGL …………… no
OpenVG …………… no
PCRE ………………. yes (bundled copy)
pkg-config …………. no
PulseAudio …………. no
QPA backends:
DirectFB …………. no
EGLFS ……………. no
KMS ……………… no
LinuxFB ………….. yes
XCB ……………… no
Session management ….. yes
SQL drivers:
DB2 ……………… no
InterBase ………… no
MySQL ……………. no
OCI ……………… no
ODBC …………….. no
PostgreSQL ……….. no
SQLite 2 …………. no
SQLite …………… qt-qt
TDS ……………… no
udev ………………. yes
xkbcommon ………….. no
zlib ………………. yes (bundled copy)
Info: creating super cache file /home/XXX/temp/source/.qmake.super
Qt is now configured for building. Just run 'make'.
Once everything is built, you must run 'make install'.
Qt will be installed into /home/XXXX/Qt541arm
Prior to reconfiguration, make sure you remove any leftovers from the previous build.
上述准确无误后,履行make -j4编译qt5.4.1开发包,这儿的-j4是告诉编译器运用4线程编译,这个数字依据当时运转渠道的CPU中心数来设置。运用多线程编译可以极大进步编译速度。我的i3-2350计算机,编译一次qt5.4.1开发包的时刻大约是40分钟左右(不过这个也和需求编译的qt5.4.1的包括项的多少有关)。
编译成功后,履行make install将qt5.4.1开发包装置到configure时-prefix指定的目录中。然后将装置目录中的lib和plugins目录拷贝到arm的nfs文件体系中的/opt/qt541arm目录下(当然,这个目录的设置看个人的兴趣爱好:) )。