当前位置: 首页 > 知识库问答 >
问题:

c++ - 为何cmake生成的dll比qmake大?

邹曦之
2023-11-21

为什么使用 qmake 生成的比 cmake 生成的 dll 要大很多?

Qt中,我们使用 qmakecmake 分别创建一个项目,然后寻找Release运行程序,再使用Qt的打包工具,两者生成的dll文件大小相差很大,这是为什么?

共有1个答案

丁德义
2023-11-21

首先,我们需要理解qmakecmake的差异。qmake是Qt项目构建系统,它是一个基于make的工具,用于生成构建文件。而cmake是一个跨平台的构建系统,它使用一个名为CMakeLists.txt的文件来描述构建过程。

对于你的问题,有几种可能的原因:

  1. 构建工具的优化设置qmakecmake在构建和链接过程中使用的优化级别可能不同。优化级别越高,生成的二进制文件越小,但运行速度可能变慢。你可以检查你的构建系统中的优化设置,看看是否有所不同。
  2. 链接的库:在生成DLL时,不同的库可能会有不同的链接效果。例如,一些库可能包含更多的功能和代码,因此它们生成的DLL文件会更大。你可以检查链接的库,看看是否有这种差异。
  3. 构建的源代码:如果源代码在两个项目中有所不同,那么生成的二进制文件可能会有所不同。例如,如果你的qmake项目包含更多的源文件或头文件,那么生成的DLL可能会更大。
  4. 工具链和编译器差异:使用的编译器和工具链版本可能不同,这可能会对生成的二进制文件大小产生影响。例如,一些编译器可能在生成优化代码时有所不同。

为了解决你的问题,你可以尝试以下步骤:

  • 检查你的qmakecmake项目中的构建配置。确保它们使用相同的优化级别、编译器和链接库。
  • 逐个检查你的源文件和头文件,确保它们在两个项目中是相同的。
  • 尝试使用不同的优化级别和链接库,看看这会对生成的DLL大小产生什么影响。

希望这些信息能帮助你解决问题!

 类似资料:
  • 本文向大家介绍C++ 使用CMake生成构建环境,包括了C++ 使用CMake生成构建环境的使用技巧和注意事项,需要的朋友参考一下 示例 CMake可以从单个项目定义为几乎所有编译器或IDE生成构建环境。以下示例将演示如何将CMake文件添加到跨平台的“ Hello World” C ++代码。 CMake文件始终被命名为“ CMakeLists.txt”,并且应该已经存在于每个项目的根目录中(可

  • 本文向大家介绍windows中使用C# 调用 C语言生成的dll,包括了windows中使用C# 调用 C语言生成的dll的使用技巧和注意事项,需要的朋友参考一下 首先建立一个C语言源文件test.c 然后下载mingw64,解压,进入到bin目录,查看是否有gcc.exe ,只要下载正确肯定是有的,可以把这个bin目录加入环境变量,就可以在任意地方运行gcc。偷懒的做法是直接把刚才做好的test

  • 目前有个一个opcdaauto.dll,该dll使用c++编写,本想使用java JNA调用,但是查看了下这个dll暴露的函数只有四个DLL开头的函数,一番查阅才知道这个和windows的COM技术有关,java不是很好调用。但是我尝试了使用c#调用就很方便,直接引用就可调用。因为整个公司技术栈都是java,所以考虑到开发和维护使用c#成本都比较高,所以打算使用c#将该dll中的所有类与方法都包装

  • qmake是一个协助简化跨平台进行专案开发的构建过程的工具程式,Qt附带的工具之一 。qmake能够自动生成Makefile、Microsoft Visual Studio 专案文件 和 xcode 专案文件。不管源代码是否是用Qt写的,都能使用qmake,因此qmake能用于很多软件的构建过程。 手写Makefile是比较困难而且容易出错,尤其在进行跨平台开发时必须针对不同平台分别撰写Makef

  • 问题内容: 以下是C 中的一个简单循环。计时器正在使用QueryPerformanceCounter(),并且非常准确。我发现Java占用了C 60%的时间,这不是吗?我在这里做错了什么?即使是严格的别名(此处未包含在代码中)也完全没有帮助… 此C ++的运行时间约为9.5秒。我正在将Intel Compiler 12.1用于主机处理器优化(专门针对我的处理器),并将所有功能都最大化。所以这是最好

  • 我有一些Java应用程序和一个客户,他们有一些UWP应用程序,用C#实现,通过Windows商店等分发,他们想使用我的应用程序的一些部分。这些部分完全独立于操作系统,只解析一些特殊的二进制文件格式,应用一些使用YAML文件和东西配置的业务逻辑。没有网络、GUI,只有一些文件访问等。 我们目前使用IKVM使C#可以使用感兴趣的代码,但已经遇到了不同的问题。有些支持.NET核心,有些与发行版中的本机工