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等文件值得打开看看。