Ubuntu 12.04交叉编译QT5.9.0

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

Ubuntu 12.04交叉编译QT5.9.0_第1张图片

创建个临时目录来装编译生成的头文件和库文件
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!"的按钮

你可能感兴趣的:(linux,嵌入式)