在Windows使用MinGW和CMake编程开发C/C++将.c文件打包成.dll库调用的过程
2026/6/30 5:42:40 网站建设 项目流程

具体过程

原来的build.bat编译脚本生成.dll文件是这样写的

g++和gcc即所所配制的MinGW工具链\bin路径下的g++.exegcc.exe,首先这里是只生成了.dll文件,但是找资料或问AI说CMake链接.dll库同时要静态链接库(如.lib)和动态链接库(如.dll);且该项目uart_win32.c中大量用了bool类型C/C++的语法(但大部分还是很纯正的C语言语法,甚至还有goto),注意到上面1条命令第一条编译生成.o文件用的是g++,第2条打包为.dll库用的是gcc两者是分开的,我在试过直接都用g++打包.dll的时候会出现英文形如“不知道编译的是那种语言”报错,后来仔细看才发现这里的细节,将这两句脚本改为如下

回到“学习过程”看的教程,AI搜索.lib静态链接库的文件只适用于MSVC编译器,对于MinGW64(即使是在Windows环境开发)是不可行的,编译过程会报错提示“找不到库文件”(即使uart_win32.lib文件就在路径中),要用.a格式的静态链接库,正如它报错提示要的需要-luart_win32文件指的就是libuart_win32.a这个文件,如之前看有的MinGW工具链Make配置找链接库的时候写“uart_win32”通常指的是找这个“libxxx.a”格式文件即找路径中的libuart_win32.a

上面CMakelist.txt中配置target_link_libraries“添加链接库”,里面要填进去的是静态链接库的路径,一般Visual Studio用MSVC开发的话就用.lib格式文件,MinWG开发的话就用“libxxx.a”格式文件(Windows操作系统也是如此),使用的时候要在.exe程序路径下放入对应的.dll动态链接库文件(除格式外和静态链接库文件同名)

实际用的时候我把它用在了C++工程,但是实际代码中引用这个主要由C语言打包成的.dll库的时候#include引用要这样写,不然g++编译的时候还是会显示形如“函数在.h声明但是未找到定义”的报错,当然调用一个.dll动态链接库过程.h文件也是不可少的要放在路径中被用到的.cpp索引到,总结一个C/C++工程调用一个.dll动态链接库必要的3种格式文件是.h文件(用于编程#include索引)、.dll文件(相当于该库源代码本身)、.lib\libxxx.a静态链接库文件(用于配置工程链接到.dll)

在新C++工程build.bat脚本的构建CMake和调用MinGW编译部分命令

最终编译成功,程序功能也正常。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询