cmake构建32位应用程序

cmake,构建,应用程序 · 浏览次数 : 33

小编点评

**1. 背景介绍** 由于G33DDCAPI.dll的版本过旧,没有源代码,无法直接使用编译器进行开发。 **2. 工具介绍** * mingw-w64编译器:用于构建32位应用程序的编译器。 * cmake:用于构建跨平台应用程序的编译自动化工具。 * CLion:一款跨平台C/C++开发IDE,可以集成编译器和其他工具,简化开发过程。 **3. 环境搭建** 1. 在CLion中创建CMakeLists.txt文件,指定编译器路径、库文件路径、目标文件等信息。 2. 点击“load cmake project”按钮,执行cmake命令生成buildsystem。 3. 创建目标文件和库文件,点击“run”启动项目。 **4. MinGW编译器版本** * 编译器版本:mingw32-gcc.exe、i686-w64-mingw32-gcc.exe、x86_64-w64-mingw32.exe * 编译器版本识别方法:使用gcc -v命令查看目标文件的target属性。 * MinGW项目需要使用mingw-w64编译器进行编译,因为mingw32编译器只支持32位程序。

正文

1. 背景介绍

最近需要使用第三方动态库文件G33DDCAPI.dll进行二次开发。由于这个动态库文件生成的时间比较早,且只提供了32位的版本,并没有提供源代码。如果希望利用这个动态库进行开发,有两种解决方法:

  1. 编译64位应用程序,但需要在64位程序中链接32位动态库;
  2. 将整个程序编译为32位应用程序。

方法1需要创建独立的线程,对动态库进行调用,并使用某种形式的IPC在64位应用程序和辅助进程之间传递这些调用。实际处理起来会很麻烦。
方法2需要搭建32位的编译环境(使用32位编译器,其他32位库etc)。在环境搭好后,不需要在程序中进行额外的处理,以下采用第二种方法。

开发环境配置如下:

操作系统:win11

编译器:mingw-w64

编译工具:cmake

IDE:CLion 2021

2. 工具介绍

首先介绍一下用到的工具,熟悉工具的大佬自行跳过。

1)编译器mingw-w64。源程序文件(源码)需要经过编译(包括预处理、编译、汇编、链接四个过程),才能生成可执行文件,这个过程需要用到编译器。mingw-w64是编译器gcc的 windows版本。注意mingw和mingw-w64并不相同,一般推荐使用mingw-w64,具体有哪些区别参考MinGW-w64安装教程

2)编译自动化工具cmake。cmake是一款开源、跨平台编译自动化工具,支持多种语言和平台。为什么要使用cmake呢?如果直接使用编译器对源程序进行编译处理,需要手动执行各种命令(如gcc,mingw32等),当源文件较多时,这个过程会非常复杂和繁琐。因此,开发人员开发了各种buildsystem(构建系统),告诉计算机如何使用编译工具,自动完成从source code到可执行文件或库文件的编译过程,即编译自动化。这些buildsystem种类繁多,包括makefile,某个IDE的项目文件,如vs的vcxproj文件等等。为了避免学习和维护多个这样的buildsystem,项目可以使用cmake语言编写的文件(CMakeLists.txt)抽象地指定其构建系统。利用这些文件,cmake可以为每个用户本地生成一个需要的buildsystem。综上所述,cmake根据CMakeLists.txt生成一个buildsystem,再由这个buildsystem指导编译器,完成源文件的编译过程,生成可执行文件或库文件。具体过程如下图所示。具体教程和帮助文档参考CMake官网

img1

3)集成开发环境CLion。由于开发过程中用到的工具比较多,手动执行的过程也比较繁琐,借助IDE将这些工具集成到一起,方便配置和使用,并且借助IDE提供的其他功能,能够极大提高开发和调试的效率。CLion是JetBrain旗下的一款跨平台C/C++开发IDE,直接官网下载,激活/破解的具体方法参考CLion安装教程

3. 环境搭建

下面介绍如何在CLion中搭建32位的编译和调试环境。

  • 步骤1,在File->Setting->Build,Execution,Deployment->CMake中进行如下设置:

cmake配置

这里是对CMake命令的参数进行设置,每一行设置的具体含义,可以参考CLion的帮助文档(设置界面左下角“帮助”图标)

  • 步骤2,同样在Setting界面,点击Toolchains,对编译调试过程中用到的所有工具,进行设置:

toolchains配置

值得注意的是,CMake和Debugger直接使用CLion自带的就行,而编译工具集Toolset不能使用CLion自带的mingw-w64,其自带的mingw-w64只提供了编译64位应用程序的版本,而为了链接32位动态库,必须使用32位编译工具集,这非常重要,否则项目在编译阶段会报错!!!关于编译器版本识别参考下一节MinGW编译器版本

  • 步骤3,创建CMakeLists.txt,使用

target_link_directories(tst PUBLIC ${PROJECT_SOURCE_DIR})

target_link_libraries(tst G33DDCAPI.dll)

告诉编译器,可执行文件tst需要链接库文件G33DDCAPI.dll,和库文件所在目录。

  • 步骤4,点击load cmake project按钮,执行cmake命令,生成对应的buildsystem。最后,点击运行,即可成功运行。

Alt text

4. MinGW编译器版本

这里多说一点,mingw编译器可以分为三种类型,Windows平台下安装mingw编译器后,在对应bin目录下,执行gcc -v命令可以看到自己到底是安装的那种编译器:

  1. mingw32-gcc.exe 编译器将在32位系统上构建32位应用程序。由于MinGW项目已经很久没有更新了,且只能编译32位程序,不推荐安装。执行gcc -v后,可以看到Target显示为mingw32,这表示你安装的编译器是老旧的MinGW版本。
    img

  2. i686-w64-mingw32-gcc.exe 编译器将在64位系统上构建32位应用程序。该编译器属于MinGW-w64项目,用于编译32位应用程序,这也是本项目需要的编译器。执行gcc -v后,可以看到Target显示为i686-w64-mingw32。
    img

  3. x86_64-w64-mingw32-gcc.exe 编译器将在64位系统上构建64位应用程序。该编译器属于MinGW-w64项目,用于编译64位应用程序,执行gcc -v后,可以看到Target显示为x86_64-w64-mingw32。
    img

更多关于MinGW编译器相关信息参考MinGW编译器版本

下一篇文章讲解,在cmake中如何利用Qt库进行32位程序的开发。

与cmake构建32位应用程序相似的内容: