
1. 从一台裸机说起Qt程序部署到底在解决什么问题刚入行那会儿我第一次把写好的Qt程序发给同事对方双击之后弹了一串英文报错我盯着那句 cannot mix incompatible Qt library 看了半天才意识到问题的根源程序交付从来不是把exe复制过去那么简单。Qt程序部署这件事本质上要做的是把我电脑上能跑变成别人电脑上也能跑中间隔着一整条依赖链。Qt的部署之所以比普通C程序麻烦是因为它默认采用动态链接方式你的程序在运行时需要一堆Qt自己的动态库核心的Qt5Core、界面相关的Qt5Gui和Qt5Widgets如果你用了串口就是Qt5SerialPort用了图表就是Qt5Charts用了网络就是Qt5Network。这些库在开发机上因为装了完整的Qt SDK所以随手可得但目标机器上不一定有。更麻烦的是光是Qt库还不够Qt还依赖编译器运行时库MinGW的libgcc、libstdc、libwinpthreadMSVC的vcruntime、msvcp以及平台插件plugins/platforms/qwindows.dll这个平时你根本注意不到的东西。这篇文章我会把Windows、Linux两大平台下的Qt程序部署方法完整过一遍覆盖静态链接和动态打包两条路线的取舍、windeployqt和linuxdeployqt这些工具的实际用法、插件的处理方式、以及我在真实项目里踩过的坑。内容适合已经能写出可运行Qt程序、但一到发给别人这一步就卡住的开发者也适合做嵌入式或者桌面交付的同学参考。如果你现在还在纠结error: unknown module(s) in qt: serialport这种编译期问题那说明还没走到部署这一步先把环境理顺再来。部署的核心思路其实只有一句话让目标机器上存在你的程序运行所需要的全部文件并且这些文件能按预期被找到。听起来简单但找到这两个字是魔鬼。Windows靠exe同目录加PATH搜索Linux靠RPATH和ld.so.cache任何一个环节没对上程序就起不来。下面我会带你把这些机制一个一个拆开看。2. 部署路线怎么选静态链接、动态打包还是安装包2.1 三条路线的适用场景对比部署方案没有银弹我见过很多人一上来就问哪个最好这问题本身就不成立因为选择取决于你的交付对象和使用场景。常见的路线有静