同版本Ubuntu下Qt C++程序无法运行:库缺失及安装后仍报错
一、先搞定运行时缺失Qt库的问题
你碰到的找不到libQt5PrintSupport.so.5、libQt5Core.so.5这些库的情况,大概率是系统没识别到Qt的安装路径,或者程序编译时依赖的本地Qt库,在目标机器上的路径没配置对。试试下面几个办法:
1. 确认Qt库的实际位置并配置系统路径
先找到Qt库的安装目录,默认一般在/opt/Qt/5.x.x/gcc_64/lib(把x.x.x换成你用的Qt版本号,比如5.15.2)。用命令快速定位:
find / -name "libQt5Core.so.5" 2>/dev/null
找到路径后,把它添加到系统的库配置里:
echo "/opt/Qt/5.x.x/gcc_64/lib" | sudo tee /etc/ld.so.conf.d/qt5.conf sudo ldconfig
配置完再运行你的程序,应该就能找到库了。
2. 用ldd检查程序依赖的库状态
运行ldd 你的程序文件名,看看那些显示not found的库是真没装,还是路径不对。如果库已经装了但路径不被识别,可以手动创建软链接:
sudo ln -s /opt/Qt/5.x.x/gcc_64/lib/libQt5Core.so.5 /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
注意替换成你实际的Qt库路径和系统架构(比如x86_64或者arm)。
3. 编译时用静态链接彻底摆脱依赖
如果不想在目标机器折腾Qt安装,编译程序时可以用静态链接。在Qt Creator的.pro文件里加一行:
CONFIG += static
然后重新编译,这样程序会把Qt库直接打包进去,运行时就不用依赖系统的Qt库了。不过缺点是程序体积会变大,还要注意Qt的开源协议要求哦。
二、解决Qt Creator安装时的函数重定义错误
这个错误通常是因为系统里已经有其他版本的Qt库、C++库,和Qt Creator的预编译文件冲突了。试试这些步骤:
1. 彻底清理旧的Qt相关安装包
先把之前装的Qt Essentials、Qt Base、Qt Creator全卸载干净:
sudo apt purge qt* qtcreator* sudo apt autoremove sudo apt autoclean
再手动删掉残留的配置和安装目录:
rm -rf ~/.config/QtProject/ rm -rf /opt/Qt/
2. 从Qt官方渠道重新安装Qt Creator
别用Ubuntu默认的apt源装Qt Creator,版本不对或者依赖冲突概率很高。去Qt官网下载和你开发时同版本的Qt安装包,运行安装程序时,选择对应版本的Qt组件和Qt Creator,安装路径尽量选默认或者全新的路径,避免和旧路径冲突。
3. 检查并统一编译器版本
函数重定义也可能是gcc/g++版本不一致导致的。运行gcc --version和g++ --version,确认目标机器的编译器版本和你开发时的尽量一致。如果版本差太多,就安装对应版本的编译器:
sudo apt install gcc-9 g++-9 # 比如你开发时用的是gcc9 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 100 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 100
总结
优先解决库路径的问题,要么配置系统识别Qt库路径,要么用静态链接打包库。Qt Creator安装尽量选官方包,避开apt源的依赖坑。如果还是有问题,可以检查程序编译时的环境变量,确保目标机器的Qt环境和开发机器完全匹配。
内容的提问来源于stack exchange,提问作者user6364231




