arm板载ubuntu18.04系统安装QT4.8.7

1,安装缘由

原来有个QT应用程序,在ubuntu12.04虚拟机中编译,然后运行在X86架构的32位ubuntu12.04操作系统中。

因众所周知的缺货原因,需要变更部署条件为:基于RK3288处理器的arm板载ubuntu18.04 64位系统(以下简称“新平台”)。

  • l  处理器:瑞芯微RK3288
  • l  CPU架构Cortex-A17
  • l  CPU频率1.8GHz
  • l  GPU型号ARM Mali-T764
  • l  GPU频率600MHz
  • l  内    存64bits,DDR3L, LPDDR2, LPDDR3
  • l  操作系统:ubuntu18.04 64位

由于硬件架构变化,以前编译的QT应用程序(以下简称“程序Q”)显然无法在新平台上直接使用,在命令行启动,返回如下错误:无法执行二进制文件: 可执行文件格式错误。

因此需要在新平台上建立编译环境,重新编译源代码,生成可执行文件。

由于采用QT4.8.7版本的源代码编译QT开发环境,主要工作就是围绕QT4.8.7版本的源代码编译展开,其它工作都是为了实现这个目标。

2,安装步骤

笔者对QT和ubuntu系统均不熟悉,经过近半个月的摸索,查阅网上资料不断实践,踩过无数坑,终于安装成功。总结为如下步骤:

1)         安装中文语言支持。

2)         安装vnc远程桌面。

3)         编译QT4.8.7源代码

4)         安装QTCreator

5)         编译程序Q源代码

6)         运行测试程序Q

3,安装中文语言支持

首先声明第一个坑,供应商提供的源千万别随意更改。

由于大部分软件安装都通过apt进行,为提高下载速度,可能会把/etc/apt/sources.list中的源改为国内阿里或清华的源。但是注意,大部分网上公开的源都是X86架构的系统才能使用的,对于ARM架构并不适用。因此特别要注意,应坚持使用供应商给的原配配置,否则一旦更改源,apt安装软件不是找不到软件,就是出现各种错误。

供应商给的ubuntu系统是英文语言,第一步需要安装中文支持。包括中文语言包和中文输入法两项工作。

本人在安装中文语言包时,无法通过ubuntu系统设置界面配置成功,但通过命令行操作设置成功:

sudo apt-get install language-pack-zh-hans

sudo apt install $(check-language-support)

 

编辑home/.bashrc 文件,加入LANG="zh_CN.utf8"

接着安装中文输入法,步骤如下:

1:安裝ibus框架 sudo apt-get install ibus ibus-clutter ibus-gtk ibus-gtk3 ibus-qt4

2:啟動ibus框架:im-config -s ibus

3:安裝拼音引擎:sudo apt-get install ibus-pinyin

4:設置ibus框架:sudo ibus-setup -》在input method 里添加 剛剛加入到chinese-pinyin.

5:添加輸入法:system settings...-》Text Entry,勾選show current input source in the menu bar前面的勾,在左面右上角就可以選擇輸入法了。

4,安装vnc远程桌面

先安装远程控制软件。以便操作。可参考:

https://blog.csdn.net/kldyutou/article/details/86129634?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control

sudo apt-get install vnc4server

vncserver

sudo apt-get install xfce4

编辑  home/.vnc/xstartup文件

reboot 命令 重启操作系统, 并且重新启动vncserver 然后 vncview远程连接成功。

5,编译前的准备

编译QT源代码前,需要准备好gcc,g++编译工具。

运行:

sudo apt-get install build-essential

然后,要调整gcc版本,系统默认的gcc和g++版本太高,为7.5,需要调整为4.8版。详见:

https://www.freesion.com/article/7546587104/

切换g++和gcc的版本的具体步骤:

sudo apt-get update

sudo apt-get install gcc-4.8

sudo apt-get install g++-4.8

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 20

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 20

然后运行g++ -v,如果看到版本为4.8.X,就OK了。

然后安装X11依赖库:

sudo apt-get install libx11-dev libxext-dev

sudo apt install libxrandr-dev

再安装mysql支持:

sudo apt-get install libmysqlclient-dev

再安装fontconfig支持:

sudo apt-get install libfontconfig1-dev

6,下载并修改QT配置

下载地址:

https://download.qt.io/archive/qt/4.8/4.8.7/qt-everywhere-opensource-src-4.8.7.tar.gz

用tar命令解压后,位于/home/ztl/Downloads/qt-everywhere-opensource-src-4.8.7/目录。

首先,修改/home/ztl/qt-src-4.8.7/mkspecs/linux-arm-gnueabi-g++qmake.conf文件。为何要修改这个文件呢?因为arm板的编译环境为linux-arm-gnueabi-g++,修改qmake.conf如下:

  • l  将所有arm-linux-gnueabi-g++替换为g++
  • l  将所有arm-linux-gnueabi-gcc替换为gcc

为何要做以上修改呢?因为文件中的arm-linux-gnueabi-g++和arm-linux-gnueabi-gcc命令不存在,系统命令实际上是g++和gcc。如果不改名,在后续的操作中将出现错误。

其次,检查代码中对QT_BUILD_KEY的定义。

修改/home/ztl/Downloads/qt-everywhere-opensource-src-4.8.7/src/corelib/global/ qglobal.h

将其中的#define QT_BUILD_KEY "arm linux arm-gnueabi-g++ no-pkg-config"

一行中的arm-linux-gnueabi-g++替换为g++,修改原因同上。

如果不修改,那么QT程序运行时可能会遇到以下错误:

"The plugin '/usr/local/Trolltech/Qt-4.8.7/plugins/sqldrivers/libqsqlmysql.so' uses incompatible Qt library. Expected build key "arm linux g++-4 no-pkg-config", got "arm linux arm-gnueabi-g++ no-pkg-config""

7,配置QT

执行如下配置:

./configure -release -shared -fast -opensource -no-3dnow -no-openssl -no-libmng -no-opengl -no-qvfb -no-glib -no-phonon  -no-qt3support -nomake examples -nomake tools -nomake docs -nomake demos -nomake test -no-openssl -qt-sql-sqlite -qt-sql-mysql -I/usr/include/mysql -L/usr/lib/arm-linux-gnueabihf -plugin-sql-mysql -qt-libjpeg  -qt-freetype -qt-freetype -qt-libpng -platform linux-arm-gnueabi-g++ -fontconfig -confirm-license -xrender -v

注意:

  • l  不要加入webkit和qt-zlib选项。否则后续make时出现错误。
  • l  需要webkit模块时,可以在后面单独make。
  • l  如果程序涉及中文字体,必须带参数-fontconfig
  • l  如果程序涉及SQLite3,必须带参数-qt-sql-sqlite
  • l  如果程序涉及MYSQL,必须带参数-qt-sql-mysql -I/usr/include/mysql -L/usr/lib/arm-linux-gnueabihf -plugin-sql-mysql
  • l  platform是个非常重要的参数,要根据实际情况选择。一般ARM采用linux-arm-gnueabi-g++,网上有些文章采用qws/ linux-arm-gnueabi-g++的。

 

 

Configure执行完毕后,要留意mysql、xrender、fontconfig等选项是否enable。如果失败,必须先修改,然后再make。否则make/ make install以后,QT程序也不能正常运行。如以下是正常支持信息:

FontConfig support ..... yes

8,编译、安装QT

执行 make -j4命令

然后就是漫长的等待。

如果没有错误导致make中止,那么就执行 make install命令,默认安装QT环境到/usr/local/Trolltech/Qt-4.8.7/目录下。

9,单独make webkit模块

首先要注意,以下方式产生的libQtWebKit.so文件与QT4.8.7不兼容,不能使用,必须从QT4.8.7的源码中编译才行。

  • l  系统自带的/usr/lib/arm-linux-gnueabihf/libQtWebKit.so文件
  • l  通过apt install libqtwebkit-dev安装
  • l  通过apt install libqtwebkit4安装

 

QT支持单独make某个模块,如webkti,mysql。这样便于灵活配置需要的模块。

Webkit模块的make非常耗时,且容易出错。

 

首先发出配置指令:

./configure -opensource -confirm-license -release 

-webkit 

-nomake demos -nomake examples -nomake tools -nomake test -fast

 

然后进入webkit目录

cd /home/ztl/Downloads/qt-everywhere-opensource-src-4.8.7/src/3rdparty/webkit/Source

 

再为webkit建立单独的make文件

qmake WebKit.pro -r -spec /home/admin/Downloads/qt-everywhere-opensource-src-4.8.7/mkspecs/linux-arm-gnueabi-g++

 

执行 make -j4命令

最后,make install,在/usr/local/Trolltech/Qt-4.8.7/lib目录下就会新增libWebKit.so。

10,安装程序Q需要的库文件

此步骤是程序Q的需求,其它场景不一定需要。

sudo apt install libqjson-dev
sudo apt install libqrencode-dev

11,安装QTCreator

https://download.qt.io/网站上,找不到一个适合本平台使用的安装版运行文件。

直接采用apt安装。先查看可用版本为4.5.2:

sudo apt-cache  madison qtcreator

 

 

再采用sudo apt-get install qtcreator直接安装

安装完后,可以正常启动qtcreator。

12,总结

经过以上步骤,程序Q在新平台上可以正常编译和运行了。此处上图一张:

总结经验如下:

  • l  遇到问题,多查资料多问多实践,“三多”帮你渡过难关。在此感谢帮助的个人和网友。
  • l  对于QT源码编译,需要非常重视准备工作。Linux系统各种环境依赖都需要手工配置。
  • l  QT的configure参数值得花时间去研究,其生成的pro,makefile等文件值得打开看看。
原文地址:https://www.cnblogs.com/jackkwok/p/14987130.html