上一篇已经将tslib移植到开发板上并且已经正常工作了,下一步就是移植QT到开发板,距离在开发板上实现QT应用程序就差这一步了。接下来就是移植QT了。
QT源码及各种资源的下载主站:http://download.qt.io/archive/qt/
里面有各个版本的QT,但是因为我开发板上一直使用的是三星当时使用的arm-2009q3的工具链,该版本工具链是使用的还是c++98,但是现在最新的QT版本已经使用c++14等高版本,不在支持98这样的老版本。所以移植选择的版本是5.6.2,5.6是最后支持98的版本。所以接下来移植该版本到开发板。
第一步:下载资源,选择上面网站里面的5.6.2 里面的qt-everywhere-opensource-src-5.6.2.tar.gz,网址如下:
http://download.qt.io/archive/qt/5.6/5.6.2/single/
然后将该压缩包传到我的Ubuntu16.04的虚拟机中,解压该文件
tar -xvf qt-everywhere-opensource-src-5.6.2.tar.gz
先创建一个安装目录/home/tt/work/qt5.6.2
mkdir qt5.6.2
然后配置qmake,QT支持多平台,配置qmake类似kernel中配置单板
修改 qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf
//添加
QT_QPA_DEFAULT_PLATFORM = linuxfb
QMAKE_CFLAGS_RELEASE += -O2 -march=armv7-a //指定芯片架构S5PV210是armv7架构
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv7-a
//然后修改交叉编译工具链为自己使用的工具链
# modifications to g++.conf
QMAKE_CC = arm-linux-gcc -lts //-lts 依赖之前移植的tslib
QMAKE_CXX = arm-linux-g++ -lts
QMAKE_LINK = arm-linux-g++ -lts
QMAKE_LINK_SHLIB = arm-linux-g++ -lts
# modifications to linux.conf
QMAKE_AR = arm-linux-ar cqs
QMAKE_OBJCOPY = arm-linux-objcopy
QMAKE_NM = arm-linux-nm -P
QMAKE_STRIP = arm-linuxi-strip
然后就是编译之前对源码进行配置
./configure -prefix /home/tt/work/qt5.6.2 \ //指明安装目录
-opensource \
-confirm-license \
-release \
-shared \
-accessibility \
-c++std c++98 \ //c++标准
-xplatform linux-arm-gnueabi-g++ \ //使用的哪个平台的qmake
-qpa linuxfb \
-linuxfb \
-qreal float \
-pch \
-qt-zlib \
-qt-libjpeg \
-qt-libpng \
-no-sse2 \
-no-largefile \
-no-qml-debug \
-no-glib \
-no-gtkstyle \
-no-opengl \
-nomake tools \
-nomake examples \
-tslib \
-skip qt3d -skip qtcanvas3d -skip qtdoc -skip qtwayland \
-I /opt/tslib/include \ //tslib相关头文件和库
-L /opt/tslib/lib
配置完成后执行make -j8
编译后报错找不到dlopen或者dlsym
解决办法:
在编译器后面加ldl arm-linux-g++ -ldl
QMAKE_CXX = arm-linux-g++ -lts -ldl
QMAKE_LINK = arm-linux-g++ -lts -ldl
QMAKE_LINK_SHLIB = arm-linux-g++ -lts -ldl
继续make
报错undefined reference to `__sync_add_and_fetch_4’
查找资料是因为缺少liblinux-atomic.a,该库是linux-atomic.c文件生成的,该文件是在gcc工具链中。利用.c文件生成.a文件指令如下:
libtool --tag=CC --mode=compile arm-linux-gcc -g -O2 -MT linux-atomic.lo -MD -MP -MF linux-atomic.Tpo -c -o linux-atomic.lo linux-atomic.c
libtool --tag=CC --mode=link arm-linux-g++ -g -O2 -o liblinux-atomic.la linux-atomic.lo
我是将.c文件放到/home/tt/work/linux-atomic文件夹下执行指令的
然后在QT源码下修改:qtscript/src/script/Makefile,注意该文件是在make以后生成的!
在LIBS = 的结尾添加 -L/home/tt/work/linux-atomic -llinux-atomic
然后继续make应该没有问题了,然后执行make install就可以在安装目录/home/tt/work/qt5.6.2下面生成我们的QT库等一系列文件了。
接下来只需要将QT库部署到开发板根文件系统中以后就可以执行QT的应用程序了。