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

cmake编译32位程序

  • 1. 背景介绍
  • 2. 工具介绍
  • 3. 环境搭建
  • 4. MinGW编译器版本

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官网。

cmake_build

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

3. 环境搭建

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

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

cmake_config

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

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

toolchain

值得注意的是,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。最后,点击运行,即可成功运行。

run_res

4. MinGW编译器版本

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

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

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

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

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

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

http://www.jsqmd.com/news/471053/

相关文章:

  • 探讨口碑好的高纯高温煅烧α氧化铝粉企业排名,前十名有哪些? - myqiye
  • 【读书笔记】Introduction to Linear Algebra | 第 8 章:线性变换
  • 突破百度网盘限速壁垒:PDown高速下载工具深度评测
  • 鹰眼YOLOv8实战:智能会议室人数统计,AI帮你自动分析空间利用率
  • Youtu-2B响应截断?max_tokens参数调整实战
  • VSCode编写Markdown
  • 北京丰宝斋:回收名家字画无套路,免费上门,当场结算,藏家变现超安心 - 品牌排行榜单
  • Flux Sea Studio 效果展示:Transformer架构下的超写实海景作品集
  • 科学驭时,智赴前程——职大教育破解兴安盟高中生时间管理困局 - 企业推荐官【官方】
  • Linux容器基石:LXC核心概念与实践指南
  • ChatGPT从入门到精通PDF:AI辅助开发实战指南
  • 救命神器AI论文写作软件 千笔ai写作 VS WPS AI 研究生必备
  • “Missing CLIPVision model“错误解析:从根源修复到预防策略
  • ai赋能边缘设备,快马平台辅助生成stm32语音识别项目代码
  • STM32H7 ADC共用寄存器原理与多ADC同步工程实践
  • Tao-8k模型与ComfyUI可视化工作流结合:复杂任务编排实践
  • LDO环路稳定性:从极点分布到ESR补偿的实战解析
  • AIGlasses_for_navigation环境部署:Ubuntu+Python3.10+Supervisor服务配置全解析
  • 闭眼入!继续教育专属AI论文工具 —— 千笔·专业论文写作工具
  • Qwen3-Reranker-0.6B效果展示:汽车维修手册故障码-解决方案精准排序案例
  • FireRedASR-AED-L案例展示:多格式音频一键转文字,识别效果超预期
  • 显卡风扇智能控制:突破转速限制的完整指南
  • [Java] this()的调用机制
  • 基于果汁氧化特性,计算榨汁后保鲜时间,推荐抗氧化处理与饮用时机。
  • 收藏!小白程序员快速入门大模型与智能体核心概念解析
  • 【独家首发】基于eBPF的MCP连接器实时流量行为监控方案——0侵入拦截SQL注入与横向移动尝试
  • AutoGen Studio入门指南:10分钟快速搭建Java开发助手智能体
  • 初识大模型:LLM、Chatbot、Agent三阶分层解析,助你轻松入门收藏必备!
  • 语音识别快速入门:基于Whisper镜像的部署与简单应用教程
  • 数据可视化工具零基础入门指南:从准备到进阶的完整路径