qt5.14.0 环境的搭建.
这不是入门文章,也不是操作指导文章,只是自己的实际操作记录,
对碰到相似问题的同学或有帮助, 对搞清真实安装到底都装了些什么或有帮助.
************************************************************
甲: x86-64环境的搭建
************************************************************
------------------------------
第一步,下载开发环境 qt5.14.0
------------------------------
以前用apt get 搭建qt 环境,顺风顺水,得心应手. 简单易行.缺什么装什么,管它谁是谁.
只是qt 的version 是固定的, 就是apt get 的版本. ubuntu18 下是qt5.9.5
现在碰到了必须要装指定的qt version, 这不,系统默认是qt5.9.5, 但有个项目要求qt5.14.0
否则编译通不过.
我要搞明白的一个问题是:
如果我下载了qt5.14.0 .run版本, 它的头文件和库文件位置在哪呢? 它跟qmake 是什么关系呢.
搭个环境试试吧.
下载和安装
这次用.run 文件来安装.
1.下载: qt-opensource-linux-x64-5.14.0.run
从以下网站: https://mirrors.tuna.tsinghua.edu.cn/qt/archive/qt/5.14/5.14.0/ 下载
2. $ chmod +x qt-opensource-linux-x64-5.14.0.run
3. 选择一种方式安装到系统(2选1)
$ ./qt-opensource-linux-x64-5.14.0.run // 会安装到home目录
$ sudo ./qt-opensource-linux-x64-5.14.0.run //会安装到 /opt 目录
安装非得要login, 挺烦的,没办法,注册一个吧.
仅仅选desktop gcc 64-bit 及source, 占的空间会小点.
安装完毕,发现文件中并没有包含qmake工具. 其实这是没有安装正确, 环境不对,你必须要解决问题.
我解决的过程是删除了qt5.9.5的环境, 并改用sudo ./qt-opensource-linux-x64-5.14.0.run安装到
了/opt 目录下, 目测安装完整,成功. run环境会安装qmake 工具及编译环境的头文件,库文件等.
怎样卸载apt get 安装的 qt5.9.5呢? 好几十个软件包.
我用apt depends qt5-assistant 查看它的包依赖, 知道它依赖于libqt5sql5,
就卸载这个根, 一下子就卸载了18个包.
autoremove 了70个包, 别把我的系统搞不正常就可以了.
又卸载了一个libqt5svg, 又卸载了不少东西, vlc 受到影响了,
libqt5core 我没敢动,卸的太多, 留着吧.
我卸载了 libqt5network5 , 影响了wireshark, 先这样吧,
注意:以后再别这么鲁莽的干了,你只要卸载带-dev的qt5相关的包就可以了,
其它运行库千万别动,否则就是自讨苦吃.
因为开发库(-dev)就是跟头文件相关的库
要卸载qmake, 腾出位置安装qt5.14.0, 装不上新版qmake很可能是就版qmake存在的缘故.
卸载qmake 就是卸载qtchooser, 好像libqt4-dev 也被卸载了, 先不管被糟蹋的环境了,为了安装qt5.14.0
------------------------------
第二步: 下载编译工具,
------------------------------
如下安装
sudo apt-get install build-essential //编译工具
记得新版qmake 遇到了依赖性问题,我用aptitude 工具解决了.
不过后来我还是把系统折腾死了, 原因是新qmake要求glibc2.29, 我的ubuntu18最高才支持2.27, 我下载了2.29 glibc, 安装到
/usr/local 目录下, 然后手工修改 /lib/x86-64-linux-gnu/ 目录下的链接, 修改libm.so.6尚可, 修改libc.so.6链接后, 系统停止了工作,
以后什么命令都是非法操作. 我用u盘启动,想把链接改回来, 结果发现u盘启动跟自己启动其文件是不一样的, 找不到文件改不回来了,
只剩下一条路重装系统了.
说实话,搭建个qt5.14.0还是挺简单的,当你知道怎么做时, 但是,也有可能让你碰到麻烦.
当然,谁愿意一开始就重装系统呢.
重安装系统(最怕网慢,现在的包都依赖于网络)再用run安装qt5.14.0开发环境,
我的宿主机系统为保持兼容vmware15 还停留在4.8内核,不敢升到5.0以上,
不过系统崩溃重装后,我升级到了5.4,抛弃了vmware15,并抛弃了win7,可惜了. 怀念它们小,跑的快.
------------------------------
第三步: 测试通过
------------------------------
写一个简单的测试程序 cat main.c
int main(int argc, char *argv[])
{
return 0;
}
发现
/usr/bin/ld: 找不到 -lGL
其实程序可能根本用不到-lGL, 去掉它就可以了, 不过我们还是假定它需要连接这个库吧,如何解决?
apt-file update 一下也要一个小时, 妈的,气死了. 第一次update,算安装,等一等吧.
查,我们装下面这个就可以了
sudo apt install libglvnd-dev
一试果然成功.
写一个复杂点的测试:
$ cat main.cpp
#include <QtWidgets/QApplication>
#include <QtWidgets/QPushButton>
int main(int argc,char **argv)
{
QApplication app(argc,argv);
QPushButton* but=new QPushButton("push me");
but->show();
return app.exec();
}
编译错误:
/opt/Qt5.14.0/5.14.0/gcc_64/include/QtGui/qopengl.h:141:13: fatal error: GL/gl.h: 没有那个文件或目录
# include <GL/gl.h>
靠, qt5 相比qt4果然有所不同, 查应该安装如下基础包.
sudo apt install mesa-common-dev
连接错误:
main.cpp:(.text.startup+0x34):对‘QApplication::QApplication(int&, char**, int)’未定义的引用
main.cpp:(.text.startup+0x69):对‘QPushButton::QPushButton(QString const&, QWidget*)’未定义的引用
main.cpp:(.text.startup+0x79):对‘QWidget::show()’未定义的引用
main.cpp:(.text.startup+0x7e):对‘QApplication::exec()’未定义的引用
main.cpp:(.text.startup+0x88):对‘QApplication::~QApplication()’未定义的引用
查应该在.pro 中添加一句:
QT+=widgets
此时生成的Makefile 会添加如下库:
/opt/Qt5.14.0/5.14.0/gcc_64/lib/libQt5Widgets.so
再编译通过.
运行也没有问题.
************************************************************
乙: 交叉编译环境的建立
************************************************************
写简单点:
1. 基础环境:
问题,所给的qmake 在ubuntu18 上不能执行, 它需要GLIBC_2.29, 而ubuntu18只能给到2.27
把它给的qmake链接到qmake-arm64上
qmake-arm64 ../temp.pro
qmake-arm64: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by qmake-arm64)
我就是换glibc 把系统换死的, 换glibc还是比较复杂的,不能手工直接替换.
建议还是直接装ubuntu20环境吧
结论: ubuntu18 不能跑交叉编译的qmake, 就是不能运行qmake-arm64.
2. 交叉编译工具:
放到/opt下指定目录, 然后在.bashrc 中设置PATH 变量,即可使用.
在ubuntu20 环境上
测试上面的demo1,demo2, 通过
************************************************************
丙: 关于建立qt-creator 集成开发环境.
************************************************************
有了上面测试做基础,就可以配置集成环境了, 按照文档来就可以了.
搞清了意思就好配置了.此忽略!