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

Qt项目查找依赖库打包

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

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

1️⃣ 查找依赖库

Windows

  • 工具

    1. windeployqt(Qt 自带)

      windeployqt 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 -p myapp | grep NEEDED
      

macOS

  • 工具

    1. otool -L

      otool -L myapp
      
    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.dtcms.com/a/331055.html

相关文章:

  • IDEA、Pycharm、DataGrip等激活破解冲突问题解决方案之一
  • Springboot项目重启后Session依旧存在
  • Python包性能优化与并发编程:构建高性能应用的核心技术(续)
  • 轻量级开源全文搜索引擎:Manticore Search 入门介绍
  • C++基础(①入门教程)
  • 本地jar导入到本地仓科和远程仓库
  • Maven学习笔记
  • 92、23种设计模式-单例模式
  • 项目日志框架与jar中日志框架冲突 解决
  • 《多级缓存架构设计与实现全解析》
  • 自动化测试|持续集成Git使用详解
  • label studio 服务器端打开+xshell端口转发设置
  • 01数据结构-最短路径Dijkstra
  • 【数据结构入门】
  • 移动机器人底盘在高校科研中的AI智能教育应用
  • (第十五期)HTML文本格式化标签详解:让文字更有表现力
  • Flutter GetX 全面指南:状态管理、路由与依赖注入的最佳实践
  • SpringMVC请求与响应
  • 三坐标测量仪:从机械精密到智能协同的技术
  • flutter 开发 鸿蒙 App
  • gitee_配置自动部署vue项目
  • Uniapp 获取系统信息:uni.getSystemInfo 与 uni.getSystemInfoSync
  • vs2022 opencv环境配置(使用相对地址-将依赖都放入项目中)
  • spring boot配置es
  • 开发避坑指南(26):Vue3 input输入框前置后 置元素解决方案
  • 新增和编辑共用弹窗模板
  • .Net Core控制台程序连接HGDB并部署到Linux
  • 【C#】跨平台创建你的WinForms窗体应用(WindowsUbuntu)
  • 上网行为安全概述和组网方案
  • 深入解析 HTTP 协议演进:从 1.0 到 3.0