当前位置: 首页 > news >正文

Qt项目查找依赖库打包

如果你是用CMake + Qt(或者其他库)编译好可执行文件,
发布之前需要做两件事:

  1. 查找程序依赖的动态库(.dll / .so / .dylib)
  2. 打包到一起(确保在目标机器上能直接运行)

1️⃣ 查找依赖库

Windows

  • 工具

    1. windeployqt(Qt 自带)

      windeployqt myapp.exe#或带参数windeployqt--release--qmldirsrc Release\myapp.exe
      • 自动把 Qt 运行时 DLL、插件、QML 模块复制到程序目录
      • 适合 Qt 项目
    2. dumpbin(VS 自带)

      dumpbin /DEPENDENTS myapp.exe
    3. Dependencies(第三方 GUI 工具)
      类似Dependency Walker,可以直观看到依赖树
      下载:https://github.com/lucasg/Dependencies


Linux

  • 工具

    1. ldd

      ldd myapp

      输出:

      libQt6Core.so.6 => /usr/lib/libQt6Core.so.6 libstdc++.so.6 => /usr/lib/libstdc++.so.6 ...
    2. lddtree(来自pax-utils包)
      递归查看依赖:

      lddtree myapp
    3. objdump -p

      objdump-pmyapp|grepNEEDED

macOS

  • 工具

    1. otool -L

      otool-Lmyapp
    2. Qt 专用

      macdeployqt myapp.app

      会自动复制 Qt 库、修正.app内的依赖路径


2️⃣ 打包发布

Qt 项目

  • Windows

    windeployqt myapp.exe

    会把所有 Qt DLL、插件、QML 文件放到和 exe 同目录。

  • Linux

    • linuxdeployqt

      linuxdeployqt myapp-appimage

      甚至可以直接打包成 AppImage

    • 或者自己复制依赖.so到一个lib/目录,并修改rpath

      patchelf --set-rpath'$ORIGIN/lib'myapp
  • macOS

    macdeployqt myapp.app

3️⃣ 发布目录结构示例(Windows)

myapp/ ├── myapp.exe ├── Qt6Core.dll ├── Qt6Widgets.dll ├── Qt6Gui.dll ├── platforms/ │ └── qwindows.dll ├── styles/ │ └── qwindowsvistastyle.dll ├── plugins/ │ └── imageformats/ │ ├── qjpeg.dll │ └── qpng.dll └── ...

💡经验建议

  • Qt 项目优先用windeployqt/macdeployqt/linuxdeployqt,省心。
  • 非 Qt 项目就用ldd/otool/dumpbin/Dependencies先找依赖,然后自己复制过去。
  • 如果要发给不装 Qt 的用户,一定要带上 Qt 的 DLL / SO / dylib。
  • Windows 发布时,记得检查MSVC 运行库是否打包(vcruntime140.dll等)。
http://www.jsqmd.com/news/1219161/

相关文章:

  • DataStructures.jl中的Trie结构:构建高效字符串检索系统的完整指南
  • 腾讯混元Hy3-FP8长上下文处理能力测试:256K tokens实战
  • 【proteus交通灯故障检测的完善方案】2025-4-29
  • GTA5线上小助手:免费高效的终极游戏辅助工具完整指南
  • Android应用动态Hook实战:从Frida环境搭建到函数拦截
  • LibTorch入门指南:C++中部署PyTorch模型的环境配置与实战
  • AMD Qwen3.5-9B-w4a16-tao-symgroup-torchao-v0.17.0与其他量化模型的对比分析
  • Beyond Compare 5终极激活指南:3种方法免费解锁专业版完整功能
  • TMS320F28003x系统控制与中断管理实战:从时钟配置到PIE模块精讲
  • 发票神器!支持1261:836等比例,更有批量裁切!
  • Windows虚拟显示器终极指南:免费扩展屏幕空间的完整教程
  • Unipacker与其他解包工具对比:何时选择哪个工具的决策指南
  • 【JavaScript】Javascript—APIs—Day05
  • IcedCoffeeScript编译原理:深入理解await/defer的底层实现
  • BiliDownloader:.NET 9架构下的B站视频解析与下载解决方案
  • 【使用D触发器74HC175实现0001 0011 0111 1111 1110 1100 1000的循环彩灯电路。】2025-4-28
  • 3分钟完成图表数字化:WebPlotDigitizer图像数据提取完整指南
  • MIT App Inventor:开源可视化编程平台的技术架构深度解析
  • C++高性能多尺寸内存池设计与实现:原理、架构与性能优化
  • 如何构建生产级Coding Agent:5个关键步骤与实战指南
  • 一个免费的浏览器插件就可以自由的下载飞书云文档
  • AI气象大模型:从数值预报到GraphCast与盘古
  • WFDB Python:如何用原生Python库实现医疗信号处理的标准化革命?
  • Chrome全屏截图插件终极指南:一键保存完整网页的免费解决方案
  • 深入解析TMS320F2838x时钟系统与ERRORSTS引脚:从架构到实战配置
  • 国际化支付:使用Stripe.js支持多种货币和支付方式的完整指南
  • RPFM工具下载问题解析:如何正确获取可执行文件
  • 【pytorch】torch.nn.Unfold操作
  • C++桌面应用自动更新模块:从架构设计到libcurl实现的完整指南
  • 如何通过雹(Hail)实现Android应用终极控制:完整解决方案指南