1. 更新Ubuntu 12.04的gcc版本
由于QT5.9.0需要用到C++11、C++14等特性,但Ubuntu 12.04默认的gcc版本是4.6.3太low,不支持C++11,所以要升级gcc版本到5.5.0(可自己决定升级到哪个版本),以下是为普通用户临时升级gcc版本的方法
参考这篇文章
https://blog.csdn.net/OliverkingLi/article/details/89645710
下载gcc-5.5.0.tar.gz
ftp://gcc.gnu.org/pub/gcc/releases/gcc-5.5.0/
解压,并进入目录,执行该脚本,即可下载相应的依赖包
./contrib/download_prerequisites
编译安装
./configure --disable-checking --enable-languages=c,c++ --disable-multilib --prefix=/your/path/to/install/gcc --enable-threads=posix
make -j8
make install
为当前用户配置环境变量
vim ~/.bashrc
在最后加入两行,保存退出
export PATH=/your/path/to/install/gcc/bin:/your/path/to/install/gcc/lib64:$PATH
export LD_LIBRARY_PATH=/your/path/to/install/gcc/lib:$LD_LIBRARY_PATH
最后重新source一下该脚本
source ~/.bashrc
执行一下gcc -v看看是否已生效
还要换掉libstdc++.so.6
ls -l /usr/lib/x86_64-linux-gnu/libstdc++.so.6
lrwxrwxrwx 1 root root 19 Jul 30 2018 /usr/lib/x86_64-linux-gnu/libstdc++.so.6 -> libstdc++.so.6.0.16
sudo rm /usr/lib/x86_64-linux-gnu/libstdc++.so.6
sudo ln -s /your/path/to/install/gcc/lib64/libstdc++.so.6 /usr/lib/x86_64-linux-gnu/libstdc++.so.6
貌似这样跟重新替换安装gcc没什么区别了呢..........暂且这样吧(编译完QT之后再还原回来好了)
2. 交叉编译QT5
官网下载qt5.9.0的源码包
http://download.qt.io/archive/qt/5.9/5.9.0/single/qt-everywhere-opensource-src-5.9.0.tar.xz
解压缩
tar xJf qt-everywhere-opensource-src-5.9.0.tar.xz
开始编译
cd qt-everywhere-opensource-src-5.9.0
vi qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf
添加3行,PLATFORM那一行是指定QT显示的驱动方式,FLAGS这两行是hisi Makefile提供的,可根据实际情况来选择
并替换成hisi的工具链 arm-hisiv600-linux-
QT_QPA_DEFAULT_PLATFORM = linuxfb
QMAKE_CFLAGS += -mcpu=cortex-a9 -mfloat-abi=softfp -mfpu=neon
QMAKE_CXXFLAGS += -mcpu=cortex-a9 -mfloat-abi=softfp -mfpu=neon
创建个临时目录来装编译生成的头文件和库文件
mkdir -p /tmp/qt_build590
配置
./configure -prefix /tmp/qt_build590 -opensource -release -confirm-license -shared -xplatform linux-arm-gnueabi-g++ -optimized-qmake -pch -linuxfb -qt-zlib -qt-libjpeg -qt-libpng -no-gif -no-opengl -no-cups -no-glib -no-dbus -no-rpath -no-sse2 -no-sse3 -no-ssse3 -no-sse4.1 -no-sse4.2 -no-avx -no-openssl -no-xcb -no-iconv -no-separate-debug-info -skip qtserialbus -skip qtlocation -make libs -nomake tools -nomake examples -nomake tests
解释:
由于没有使用到触摸屏,所以不需要 -tslib
也没有使用什么串行总线,所以 -skip qtserialbus
也没有使用地图相关的功能,所以 -skip qtlocation
编译:
make -j8
make install
3. 开发板上运行QT demo程序
就拿下面这个例子作为demo吧
cd qt-everywhere-opensource-src-5.9.0/qtbase/examples/qmake/tutorial
新建一个工程文件 tutorial.pro
QT += core widgets
SOURCES += hello.cpp main.cpp
# install
target.path = $$[QT_INSTALL_EXAMPLES]/qmake/tutorial
INSTALLS += target
再执行一下qmake即可生成Makefile文件
/tmp/qt_build590/bin/qmake
编译
make
将生成的 tutorial 拷贝到开发板
把 /tmp/qt_build590/lib plugins 这2个目录打包拷贝到板子上或者通过nfs挂载到开发板
这里以nfs为例
在开发板设置环境变量
export QTDIR=/nfsroot/qt_build590
export QT_QPA_FONTDIR=$QTDIR/lib/fonts
export QT_QPA_PLATFORM_PLUGIN_PATH=$QTDIR/plugins
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0:size=400x300:mmSize=400x300:offset=0x0:tty=/dev/tty1
将字体库文件放到 /nfsroot/qt_build590/lib/fonts 目录下
下载字库链接:http://pan.baidu.com/s/1bp9QFQv 密码:2u81
该字体库也是支持中文的!
运行 tutorial 可以看到一个开发板显示一个"Hello world!"的按钮