如何在CentOS 7上安装Qt 5.15以编译依赖该版本特性的程序及用户端相关问题咨询
如何在CentOS 7上安装Qt 5.15以编译依赖该版本特性的程序及用户端相关问题咨询
嗨,我来帮你梳理下解决思路!CentOS 7官方软件源里的Qt版本确实停在了5.9,要用上Qt 5.15的特性来编译你的程序,有几个靠谱的方案,同时用户端的运行问题我也一并给你说明:
一、安装Qt 5.15到CentOS 7的可行方案
1. 使用Qt官方在线安装器(最推荐)
这个方法最省心,是官方维护的版本,还能灵活选择你需要的组件:
- 先获取Qt官方在线安装器的Linux x64版本(可在Qt官方下载页面找到)
- 给安装器添加执行权限:
chmod +x qt-unified-linux-x64-*.run - 运行安装器:
./qt-unified-linux-x64-*.run - 安装过程中,选择Qt 5.15.x系列的LTS版本(比如5.15.2,稳定性更好),然后勾选你需要的组件,比如
Desktop gcc 64-bit、Qt Creator(如果需要开发IDE),以及你的程序依赖的Qt模块(比如Qt Widgets、Qt Network等) - 安装完成后,把Qt的bin目录添加到环境变量中。假设你安装路径是
/opt/Qt5.15.2/5.15.2/gcc_64/bin,可以编辑~/.bashrc文件,添加一行:export PATH=/opt/Qt5.15.2/5.15.2/gcc_64/bin:$PATH,然后执行source ~/.bashrc让配置生效 - 验证:执行
qmake --version,如果显示Qt 5.15.x的版本,就可以正常编译你的程序了
2. 从源码编译Qt 5.15
如果官方安装器因为网络等问题无法使用,或者你需要自定义编译选项,源码编译是个不错的选择:
- 先安装编译依赖:
sudo yum install gcc gcc-c++ make cmake git libxcb-devel libx11-devel libxkbcommon-devel libxkbcommon-x11-devel mesa-libGL-devel freetype-devel fontconfig-devel perl - 获取Qt 5.15的源码:可以克隆官方仓库的指定分支,比如
git clone -b 5.15.2 https://code.qt.io/qt/qt5.git,也可以直接下载源码压缩包 - 进入源码目录,初始化子模块:
cd qt5 && perl init-repository - 创建单独的编译目录并进入:
mkdir build && cd build - 配置编译选项,示例如下(可根据需求调整,比如需要OpenGL就去掉
-no-opengl):../configure -prefix /opt/Qt5.15.2 -release -opensource -confirm-license -xcb -no-opengl - 开始编译:
make -j$(nproc)($(nproc)会自动使用所有CPU核心,加快编译速度) - 安装到指定路径:
sudo make install - 同样需要将Qt的bin目录添加到环境变量,方法和上面一致
3. 第三方仓库(可选,谨慎使用)
部分社区维护的第三方仓库提供Qt 5.15的RPM包,比如一些扩展仓库,但这类包的稳定性和兼容性不如官方版本,还可能和系统自带的Qt 5.9产生冲突。如果要尝试,先添加对应仓库,再执行类似sudo yum install qt5-qtbase-devel qt5-qtdeclarative-devel的命令安装所需开发包,但优先推荐前两种方案。
二、动态链接情况下的用户端运行问题
因为你使用的是动态链接,用户运行你的程序时确实需要依赖Qt 5.15的库,这里提供几种解决方案:
- 引导用户安装Qt 5.15运行库:用户可以通过官方在线安装器安装Qt 5.15的运行库,或者你可以告知他们将Qt的lib目录添加到
LD_LIBRARY_PATH环境变量,比如export LD_LIBRARY_PATH=/opt/Qt5.15.2/5.15.2/gcc_64/lib:$LD_LIBRARY_PATH - 打包程序时附带依赖库:可以使用
linuxdeployqt工具(专门为Qt程序打包的工具),它会自动收集程序所需的Qt库和其他系统依赖,打包到程序目录中。编译好程序后,执行linuxdeployqt your_program -appimage,生成的AppImage包用户无需额外安装Qt即可直接运行 - 改为静态编译:如果改成静态链接,编译出的程序是单文件,用户不需要安装任何Qt库就能运行。但静态编译需要在编译Qt时添加
-static配置选项,且部分Qt模块(如Qt WebEngine)静态编译难度较高;另外,开源软件静态链接Qt需遵守LGPL协议,要注意合规性
备注:内容来源于stack exchange,提问作者TSG




