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

CMake实践: 以开源库QSimpleUpdater为例,详细讲解编译、查找依赖等全过程

目录

1.环境和工具

2.CMake编译

3.查找依赖文件

3.1.windeployqt

3.2.dumpbin

4.总结

相关链接


QSimpleUpdater:解锁 Qt 应用自动更新的全新姿势-CSDN博客

1.环境和工具

windows 11, x64

Qt5.12.12或Qt5.15.2

CMake 4.0.2 

干净的windows 7,最好是用windows7的iso安装出来的

虚拟机VirtualBox

Everything

2.CMake编译

进入QSimpleUpdater的源码目录,新建build文件夹:

进入build目录,执行命令:

cmake  ../

出现报错,需要设置一下Qt的目录,因为cmake找不到Qt在哪里,配置并重新执行命令:

生成VS2022工程成功

你可以用VS2022打开QSimpleUpdater.sln工程,全部编译就会生成库文件和测试执行文件,当然也可以直接用CMake去编译,如下:

于是在build目录下的Release中生成了目标文件:

直接运行UnitTests.exe出现:

3.查找依赖文件

3.1.windeployqt

在命令行模式进入C:\Qt\5.12.12\msvc2019_64\bin,然后运行:

然后在UnitTests.exe的目录下查找到Qt的库依赖:

从截图可以看到,用这个工具只能查找Qt的依赖,系统的一些依赖是不能打包进去的

然后把这个程序打包放到干净的win7下面运行报错:

说明安装包里面少了一些依赖库。

3.2.dumpbin

        Dumpbin是Windows环境下用于分析可执行文件内部结构的命令行工具,由Microsoft Visual C++提供。它能够揭示二进制文件的详细内容,如导出函数、导入函数、资源等,特别有助于调试DLL。主要功能包括:

  1. 查看文件头信息:包含 PE 文件结构、子系统、DLL 特性等
  2. 分析导出表:列出 DLL 中导出的函数和变量
  3. 分析导入表:显示程序依赖的外部函数和 DLL
  4. 依赖分析:检查二进制文件依赖的所有动态链接库
  5. 符号表查看:显示 COFF 符号表信息,用于调试和链接分析
  6. 资源查看:查看二进制文件中包含的资源(图标、菜单、字符串等)

dumpbin.exe在vs2022的安装目录下"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin"

从开始进去中的Visual Studio 2022菜单下:

在命令行中输入dumpbin会出现:

继续在命令行中输入:

可以看到UnitTests.exe的依赖库,可以看到除了Qt的库外还有一些系统的库,通过Everything软件查找的库大致在两个地方:

依次从这两个目录中把上面依赖的文件拷贝到打包目录中,然后打包,再把打包的程序放在win7上面去运行:

还是报错误,找不到MSVCP140.dll,于是又在原来的电脑上查找库MSVCP140.dll,拷贝到win7上

拷贝MSVCP140.dll到win7上运行程序:

报错了,程序崩溃了。

在网上查找了一下原因:

0xc000007b
表示 “应用程序无法正常启动”,通常是因为缺少 UCRT 或运行时库

0xc0000135
表示 “找不到 DLL”,需检查依赖的 DLL 是否在系统中存在。

于是又把目录C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\Remote Debugger\x64目录里面的文件全部拷贝过去,把比较明显不需要的删掉。

拷贝到win7,运行,报如下错误:

还是缺少msvcp140_1.dll,于是查找到该文件:

拷贝到win7,运行:

终于可以运行,正常输出结果了!!!

4.总结

1.在windows发布程序,一定要在一个干净的环境下去测试程序是否能运行,比如win7,如果在干净的win7能运行,那基本上在win7之后的版本应该都能运行。

2.查找程序依赖,vs2022编译出来的程序,依赖的库一般都去vs2022的安装目录里面去找,会比较快。

3.好好的利用Everything工具,用它查找真是快。

相关链接

  • CMake 官网 https://cmake.org/
  • CMake 官方文档:https://cmake.org/cmake/help/latest/guide/tutorial/index.html
  • CMake 源码:https://github.com/Kitware/CMake
  • CMake 源码 : CMake · GitLab
  • 中文版基础介绍: CMake 入门实战 | HaHack
  • wiki: Home · Wiki · CMake / Community · GitLab
http://www.xdnf.cn/news/14181.html

相关文章:

  • Reqable・API 抓包调试 + API 测试一站式工具
  • 17_Flask部署到网络服务器
  • 【软测】接口测试 - 用postman测试软件登录模块
  • 微机原理与接口技术,期末冲刺复习资料(汇总版)
  • Linux进程间通信(IPC)详解:从入门到理解
  • H5 技术与定制开发工具融合下的数字化营销新探索
  • 高效录屏工具推荐:从系统自带到专业进阶
  • 函数调用过程中的栈帧变化
  • 普通Dom转换为可拖拽、最大化、最小化窗口js插件
  • 【在线五子棋对战】六、项目结构设计 工具模块实现
  • 【unitrix】 1.6 数值类型基本结构体(types.rs)
  • 商用油烟净化器日常维护的标准化流程
  • Arduino入门教程:4-1、代码基础-进阶
  • 静态变量详解(static variable)
  • 微博项目(总体搭建)
  • Javascript什么是原型和原型链,八股文
  • java面试总结-20250609
  • 数据结构 学习 图 2025年6月14日 12点57分
  • spring如何处理bean的循环依赖
  • NuttX 调度器源码学习
  • 吃透 Golang 基础:方法
  • 湖南源点(市场研究)咨询 DNF下沉市场用户研究项目之调研后感
  • 03、继承与多态
  • 使用C/C++的OpenCV 构建人脸识别并自动抓拍系统
  • 使用DuckDB查询DeepSeek历史对话
  • AI首次自主发现人工生命
  • C++编程语言
  • Spring Cloud 原生中间件
  • Linux免驱使用PCAN,使用方法以Ubuntu为例
  • Java基础复习之static