统信UOS离线安装Qt 5.12.8:从GCC版本到环境变量全攻略
2026/9/16 21:16:01 网站建设 项目流程

如果你在统信UOS上装过Qt,大概率也在在线安装器上栽过跟头。我这个月刚把开发机从Ubuntu迁到UOS V20,装Qt 5.12.8的时候连续踩了两个坑:一个是打开安装器直接卡在一个“必须先登录此网络才能访问互联网”的页面,另一个是装完之后用系统自带的GCC编译Qt项目,版本对不上、依赖库各种报错。这两件事折腾了两天,最后换离线安装包、固定GCC版本才顺利跑通。

这篇就把完整流程整理成保姆级教程,从离线安装包怎么找、GCC版本怎么选、缺库怎么补,到安装完成后qmake怎么配环境变量,全部按我实际操作的顺序来写。适合在国产Linux环境里做Qt开发的同学,也适合需要在内网批量部署Qt开发环境、手上又只有一台不能随意联网机器的运维朋友。照着这个流程走,能省下大量试错时间。

1. 项目整体思路与避坑点前置说明

1.1 为什么这次必须走离线路线

先说第一个坑。我一开始用的Qt在线安装器(qt-unified-linux-x64-online.run),这个安装器启动后会先请求Qt账号登录页,目的是拉取远程的组件列表。问题就出在这里:公司内网访问外网需要先通过一个网络认证页面,浏览器一旦弹不出来,Qt安装器就一直停在初始化的状态,报错信息还特别模糊,只提示连接失败。

更麻烦的是,就算你的网络能打开网页,Qt在线包的下载服务器在国外,下载速度极不稳定,安装到一半断掉也是常有的事。在需要内网隔离、无法访问外网的环境里,在线安装基本就是死路一条。

所以我这次直接放弃在线安装器,改用Qt 5.12.8的离线安装包(qt-opensource-linux-x64-5.12.8.run)。离线包的好处非常明显:它把组件内容都打包在文件里,安装过程不联网、不登录、不拉取远程数据,装完就能用。整套流程和你去药店买盒装感冒药一样,拆开就能吃,不用先挂号问诊。

1.2 Qt 5.12.8 在统信UOS上的特殊定位

统信UOS V20桌面本身是基于Qt 5技术栈构建的,系统里其实已经带了不少Qt5运行时组件。很多同学看到系统里有libQt5Widgets、libQt5Core这些库,以为Qt已经装好了,直接用就行,结果一敲qmake,提示找不到命令,再一查头文件,发现/usr/include里也没有Qt的相关目录。

原因是系统自带的只是Qt运行时库,作用是让桌面程序能跑起来,不是完整的Qt开发环境。开发者需要的qmake、moc、头文件、模块库、Qt Creator这些,一套完整的SDK都没装。所以在UOS上装Qt,不能想当然地跳过。

为什么推荐5.12.8而不是更新的版本?一方面因为这个版本是Qt 5.12 LTS系列里的稳定维护版,企业项目使用率很高;另一方面统信UOS的桌面组件对Qt 5.12系列适配得比较成熟,相关的动态库依赖在系统里基本都有,后续补依赖的坑会少很多。5.15虽然也常用,但在老一些的UOS版本上,个别模块的依赖缺口更大,对离线安装不算友好。

1.3 准备物料清单

在开始动手之前,先把需要准备的东西列清楚,避免装到一半发现缺这个缺那个。

物料说明来源
Qt 5.12.8 离线安装包qt-opensource-linux-x64-5.12.8.run,约1.3GB官方archive或国内镜像
GCC工具链建议使用系统自带的GCC 8.3.1UOS自带
基础开发依赖g++、make、libc6-dev、binutilsUOS软件源或预下载deb
运行库libGL、libxcb等UOS软件源或预下载deb
U盘或内网传输通道用于把安装包拷贝到目标机器按实际情况准备

2. 离线安装包获取与校验

2.1 官方下载与国内镜像地址

Qt 5.12.8的离线安装包可以从几个渠道获取。官方archive的地址是download.qt.io,目录路径为archive/qt/5.12/5.12.8/qt-opensource-linux-x64-5.12.8.run。这个地址在浏览器里直接访问即可,不需要登录。

不过官方服务器在境外,国内直连速度不稳定。建议优先用国内镜像:清华大学的mirrors.tuna.tsinghua.edu.cn、中国科学技术大学的mirrors.ustc.edu.cn、阿里云的mirrors.aliyun.com,路径和官方保持一致,都是/qt/archive/qt/5.12/5.12.8/qt-opensource-linux-x64-5.12.8.run。

下载的时候注意文件名,别下成在线安装器。在线和离线这两个文件名看起来很像,实际上差别很大。在线安装器是几百兆的小文件,离线包是1.3GB左右的大文件。如果你看到下载下来的文件只有一两百MB,而且文件名里带online字样,那就是下错了。

2.2 从已有机器直接拷贝整套目录

如果连镜像站也访问不了,还有一个更省事的路子:找一台已经装好Qt 5.12.8的相同架构Linux机器,把整个Qt安装目录打成压缩包拷过来。

Qt的安装目录结构是自包含的,不像某些软件需要写注册信息。我在多台机器上验证过,只要系统架构一致(比如都是x86_64),glibc版本相近,直接解压到目标机器就能用。

打包命令:

tar -czf qt5128.tar.gz /opt/Qt5.12.8

到目标机器上解压:

sudo tar -xzf qt5128.tar.gz -C /opt/

这种方式部署速度最快,适合在内网同时给几十台机器装环境的场景。缺点是你得有现成的安装好的机器,一般手上有开发机的同学都能满足这个条件。注意压缩包里要把整个Qt目录完整保留,特别是5.12.8/gcc_64和Tools这两个目录不能少,Tools目录里装了Qt Creator和编译工具链。

2.3 下载后的完整性校验

不管从哪里下载,装之前都要校验一下包的完整性。一个简单又可靠的办法是比对SHA256哈希值。

sha256sum qt-opensource-linux-x64-5.12.8.run

然后去官网或者镜像站的MD5SUMS、SHA256SUMS文件里查对应的值。如果哈希对不上,说明下载过程中文件损坏了,装到一半很可能报错退出。

我见过有人不看哈希,下载完直接运行,结果安装器在解包阶段报“archive is corrupted”,折腾半天才发现是下载不完整。下载大文件这种事,多花十秒钟校验能避免半个小时的麻烦。

3. GCC 版本选择与依赖准备

3.1 先查一下系统当前的编译器

Qt安装包里自带了编译套件,但真正编译你项目代码的是系统里的GCC和G++。版本不匹配会导致编译错误或者编译出来的程序运行异常。

在UOS上先执行这几条命令看现状:

uname -m gcc --version g++ --version

统信UOS V20系列默认自带的GCC是8.3.1,这个版本对Qt 5.12.8来说完全够用。Qt官方对GCC的要求是最低4.8.2,编译Qt库本身以及Qt项目都是在这个版本基础上验证过的。所以如果机器上已经是8.3.1,不需要做任何升级操作,直接用就行。

这里有一个常见的认知偏差:有人觉得编译器版本越新越好,于是手动下载了GCC 11或者12装到系统里,结果编译Qt项目时反而报了一堆ABI兼容问题。实际上Qt 5.12.8发布年代对应的GCC工具链就是8.x左右,你拿太新的编译器去编老项目,标准库头文件的变化就可能让你多出几十个编译错误。

3.2 GCC版本兼容性快查

GCC版本Qt 5.12.8支持程度说明
4.8.2支持最低要求
5.x支持可用
6.x-8.x推荐最佳匹配区间
9.x-10.x基本可用个别旧项目可能遇到C++标准差异
11及以后不推荐ABI变化大,老项目编译容易出问题

如果你要编译的项目是多年积累的老代码,建议GCC保持系统默认版本,不要升级。如果你确实需要多个GCC版本共存,用update-alternatives管理,而不是直接替换系统的默认gcc命令。

3.3 离线环境下的依赖包怎么备齐

离线安装最大的麻烦不是Qt安装包,而是系统依赖。好在UOS自带软件源里就有大部分需要的包,问题在于你的目标机器可能根本连不上软件源。

我的做法是在一台可以联网的同版本UOS或者Debian 10机器上,提前用apt-get download把需要的deb包下载下来。

mkdir gcc-debs && cd gcc-debs apt-get download gcc g++ make libc6-dev binutils dpkg-dev

然后把整个目录拷到目标机器,用dpkg安装:

sudo dpkg -i *.deb

dpkg安装deb包时如果报依赖错误,说明还有包没下全。这时可以通过apt的模拟安装来补齐:

apt-get install --print-uris g++

这个命令会把g++以及所有依赖包的下载链接打出来,你在联网机器上把这些URL对应的deb包挨个下载,凑齐之后再搬过去。虽然麻烦,但在完全隔离的内网里这是最靠谱的办法。

3.4 为什么装完新GCC后版本还是没变

有同学会碰到这种情况:明明apt install gcc显示已经是最新版本,或者手动编译安装了新版本的GCC,但执行gcc --version看到的还是旧版本号。这个问题我也踩过,原因一般有这几种:

一是命令路径不对。用type -a gcc看看执行的是哪个路径下的gcc。如果有/usr/local/bin/gcc和/usr/bin/gcc两套并存,默认PATH里/usr/local/bin优先,那执行到的可能是你自己编译的版本,但因为没有正确安装头文件和库,导致编译器自己报版本不对。

二是shell的hash缓存。同一个命令你之前执行过,bash会把路径缓存起来,新装的命令可能被缓存挡住了。执行hash -r清一下缓存就能解决。

三是update-alternatives的软链接没切换。用update-alternatives --config gcc手动选一下默认版本,适合系统里同时存在多个GCC的场景。

4. 安装实操流程:从放包到qmake跑通

4.1 拷贝安装包并赋予执行权限

把下载好的qt-opensource-linux-x64-5.12.8.run拷贝到目标机器上,我习惯放到家目录或者/opt目录下,路径不要带中文和空格,避免安装器解包时出问题。

给安装包加执行权限:

chmod +x qt-opensource-linux-x64-5.12.8.run

然后运行它:

./qt-opensource-linux-x64-5.12.8.run

如果是在SSH远程连接的环境,你需要确保DISPLAY环境变量已经指向有效的X11显示,比如本地Xshell开了X11转发,或者在UOS图形桌面终端里直接执行。纯SSH看不到图形界面的话,后面会说静默安装的方法。

4.2 图形界面安装的关键步骤

安装器打开后,界面上会有欢迎页和协议页,直接下一步。安装路径默认是用户主目录下的Qt5.12.8,我建议改成/opt/Qt5.12.8,原因是多用户共用开发机时,装到/opt下所有用户都能引用,不会因为某个用户的目录权限对不上导致编译脚本找不到qmake。

组件选择页是重点。默认全选的话,安装体积会大很多,包含Android模块、iOS模块等一堆你用不到的东西。在UOS上做桌面开发,至少保留这几个组件:

  • Qt 5.12.8 下的 Desktop gcc 64-bit,这是核心SDK
  • Qt Creator,集成开发环境
  • Qt Debug Information Files,调试符号,排查崩溃时有用
  • Qt Charts、Qt Data Visualization 这类按项目需要勾选

安装时间取决于磁盘性能,一般10到20分钟。全程不需要联网,也不会弹登录窗口。我装的时候特意看了网络连接状态,流量面板纹丝不动,彻底绕开了之前那个“必须先登录此网络才能访问互联网”的坑。

4.3 无桌面环境时的静默安装方式

如果你是通过SSH维护一台没有图形界面的UOS服务器,或者想在几十台机器上批量安装,就得用静默安装模式。Qt安装器支持通过JS脚本控制安装过程。

先写一个安装脚本qt-installer-noninteractive.qs:

function Controller() { installer.autoRejectMessageBoxes(); installer.installationFinished.connect(function() { gui.clickButton(buttons.FinishButton); }); }

然后运行安装器时指定脚本和minimal平台:

./qt-opensource-linux-x64-5.12.8.run --script qt-installer-noninteractive.qs --platform minimal --verbose

minimal平台会避免加载xcb等图形平台插件,纯命令行环境下也能跑。注意这个模式会默认安装全部组件,安装体积较大,装完大概占10GB以上空间。要精简组件的话,需要在脚本里手动设置安装组件列表,这里就不展开,有兴趣的可以研究一下Qt Installer Framework的脚本API。

4.4 环境变量配置与qmake验证

安装完成后,最重要的一步是配置环境变量。如果不配置,每次都要敲/opt/Qt5.12.8/5.12.8/gcc_64/bin/qmake才能调用qmake,很多集成环境也找不到Qt路径。

我习惯在/etc/profile.d/下建一个专门的脚本,这样所有用户登录时都会自动加载:

sudo vim /etc/profile.d/qt5.sh

写入:

export QTDIR=/opt/Qt5.12.8/5.12.8/gcc_64 export PATH=$QTDIR/bin:$PATH export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

保存后执行:

source /etc/profile.d/qt5.sh

验证是否生效:

qmake -v

正常情况下会输出:

QMake version 3.1 Using Qt version 5.12.8 in /opt/Qt5.12.8/5.12.8/gcc_64/lib

看到这个输出,Qt环境就算真正可用了。

5. 常见问题与排查技巧实录

5.1 安装/运行阶段最典型的几个报错

先整理一份报错速查表,都是我在UOS上实际遇到或者帮同事处理过的。

报错现象可能原因解决方法
error while loading shared libraries: libGL.so.1系统缺OpenGL库sudo apt install libgl1 libgl1-mesa-dev
Could not load the Qt platform plugin "xcb"xcb相关依赖缺失sudo apt install libxcb-xinerama0 libxcb-icccm4 libxcb-keysyms1 libxcb-shape0
error: g++: command not found没装g++编译器sudo apt install g++
GLIBCXX_3.4.XX not found编译器运行时库版本过旧检查gcc/g++版本,必要时升级libstdc++
qmake: command not foundPATH没配置或没source检查环境变量配置,重新source

libGL这个错误几乎是必踩的,尤其是精简安装的UOS系统。Qt的GUI程序启动时要加载OpenGL库,系统如果没有预装图形驱动相关的开发库就会报这个错。别慌,直接apt装一下就能解决,但前提还是你的软件源可用,否则就得参考第3.3节提前把deb包备好。

5.2 装完后Qt Creator打不开怎么办

安装过程一切正常,Qt Creator双击图标却启动不了,屏幕上一闪而过或者干脆没反应。这种情况先到命令行手动启动,看具体报错:

/opt/Qt5.12.8/Tools/QtCreator/bin/qtcreator

如果是用root用户执行,十有八九会遇到沙箱相关的报错,Qt Creator内置的WebEngine组件在root权限下默认不允许启动沙箱。解决办法是设置环境变量:

export QTWEBENGINE_DISABLE_SANDBOX=1

如果你是通过SSH远程访问,还会遇到DISPLAY环境变量为空的情况。Qt Creator作为图形程序必须要能连到X server,本地登录UOS桌面没问题,远程SSH就要用X11转发,或者在UOS的远程桌面工具里操作。

5.3 编译器在Qt Creator里配置不生效

Qt Creator打开后,在工具-选项-Kits里可能显示编译器为None,无法自动识别GCC。这时候手动指定一下编译器路径就行。

GCC路径一般是/usr/bin/gcc,G++路径是/usr/bin/g++,gdb路径是/usr/bin/gdb。Qt Creator会自动探测这些路径,偶尔探测失败就手动填。还有一个容易忽略的点:如果你配置了多个版本的GCC,Kits里选了某个Kit,但项目构建时用的还是旧的,大多数情况是CMake cache没清理。删掉build目录重新构建就能解决。

5.4 卸载与目录迁移

离线包安装的Qt没有统一的卸载工具,我试过直接运行安装器目录下的MaintenanceTool,但离线安装的情况下它有时候能用有时候不行。最干净的方式就是删除安装目录:

sudo rm -rf /opt/Qt5.12.8

同时把/etc/profile.d/qt5.sh里的环境变量相关配置删掉,避免PATH里残留无效路径。

如果你想把Qt从一台机器迁到另一台,直接拷贝整个目录即可,这也是我在第2.2节说过的路子。迁移后记得检查一下目录的属主和权限:

sudo chown -R yourname:yourname /opt/Qt5.12.8

不然用普通用户打开Qt Creator,会因为没有目录写权限导致无法创建构建缓存。

最后再分享一个批量部署的小经验:如果你需要给团队里十几台机器统一装环境,不要一台台跑安装器,在一台基准机上装好Qt,配置好环境变量,然后把整个目录连同环境配置脚本打成包,分发到其他机器解压,全程不需要动网络。我有个项目组就这么干,原来一台上手要40分钟,后来十分钟就能交付一台能正常编译Qt项目的机器。

统信UOS上装Qt 5.12.8这件事,本身难度不高,但每一步都有容易踩的暗坑。网络登录问题用离线包解决,GCC版本问题用系统自带8.3.1解决,缺依赖库的问题用提前备份deb包解决。把这三点想清楚,整个安装过程就会非常顺利。希望这篇教程能帮你少走一些弯路。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询