MinGW 使用和创建 DLL 应注意的问题

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

最近到了新的公司,在Windows平台下做qt开发,编译器用MinGW,看串口编程时遇到找不到函数实现问题,网上搜了一下资料,记录一下。



摘自:http://hi.baidu.com/cyberniuniu/item/d64ae55e8ec606cbd2e10c6f

MinGW 是 GCC 的 Windows 版本,稳定版已经到了 4.5.2,功能和性能上很好,感觉不比 Microsoft 自家的 VC 差啊。
但是 MinGW 下使用和创建 DLL 倒是要特别注意,问题主要集中在 g++ 编译器(C++ 的 GNU 版本编译器)对于 DLL 的函数输入以及
输出的名称修饰、调用协议上和 VC 编译器是有很大区别的。

1、MinGW 如何使用一个标准的 DLL。这里标准 DLL 指的是采用 __stdcall 调用协议、并且导出函数名称干干净净,
没有函数名尾部的 @nn、没有函数名头部的下划线的。MinGW 的 g++ 程序中,对于需要从 DLL 中导入的函数,声明时必须要用 extern "C",
但不要用 __declspec(dllimport),虽然 g++ 支持,但是一旦你使用,则 g++ 在链接时会自动强制在需要导入的函数名前加 _imp__ 前缀,
导致链接时找不到函数名错误。所以,我们其实完全不需要用 __declspec(dllimport)。另一方面,gcc/g++ 编译器遇到代码中 __stdcall 修饰的函数名,
会自动将其函数名在链接时设置为函数名@nn,nn 是函数参数栈字节数。另外,gcc/g++ 编译器/链接器在链接时其实不需要 DLL 的导入库(import lib),
因为它们可以直接从 DLL 链接,这样更加方便,省去了很多从 DLL 如何生成符合格式要求的 .a 导入库等问题。
只需要在 gcc/g++ 参数中加入 -Wl,--enable-stdcall-fixup -L../../Bin/ -lDLL文件名(不含.dll)即可直接从 DLL 文件本身完成链接。
这里要注意,-Wl参数指示 g++ 链接器需要采用后面的链接控制参数(以逗号分隔),--enable
如何使用minGWSMVC两种方法编译.dll动态库.lib静态库 MinGW编译器的全称是 Minimalist GNU for Windows。它提供了一个开发环境,使开发者可以在Windows上编写、编译调试使用C、C++、Fortran等语言编写的程序,MinGW的核心是GCC编译器。SMVC编译器的全称是 Simple Model-View-Controller,使用PHP框架,是Visual Studio软件中常用的编译方法。一般使用minGW编译出的动态库静态库格式分别为.dll.dll.a; 阅读详情

相关推荐

mingw 下编译的libx264 DLL 如何在vs2010里使用

1.从网上下载pexports.exe,放到 C:/Program Files(x86)/Microsoft Visual Studio 10/VC/bin下。 2.命令行切换到上述目录,执行:pexports d:\\libx264-142.dll > d:\\libx264-142.def  3.继续执行:lib /machine:x86 /def:d:\\libx264-142.def

anbinger2013的专栏 1798

重复造轮子之串口模块-串口助手(1)

接下来新建主心骨项目app,右键新建带ui的子项目->Application->Qt Widgets Application;在class Global 类内声明串口模块需要的枚举类型,并在cpp文件中注册该类型,只有这样做Qt的信号槽机制才支持自定义的数据类型。上一篇谈到数据结构与业务逻辑分离,所以接下来要新建一个共享库global,右键新建子项目->Library->c++ Library。注意所有的子项目构建套件都选相同的,我这里选MinGW 64bit。头文件中类外声明串口的需要的参数结构体。

jimzjb的博客 484

使用vs2019编写dll

本文通过一个demo演示dll的编写调用。 一、编写dll 首先编写一个dll,它提供一个加法函数使用visual studio新建项目,我把项目命名为AddDll,选择模板windows桌面向导-动态链接库,并勾选导出符号; 项目结构如图 分别修改 AddDll.h AddDll.cpp AddDll.h // 下列 ifdef 块是创建使从 DLL 导出更简单的 // 宏的标准方...

hambaga的博客 3322

MinGW使用

一、环境配置 1.  下载安装MinGW      地址  http://sourceforge.net/projects/mingw/ 2.  设置环境变量            在path变量中,添加路径mingw的路径,如C:\Program Files\MinGW\bin

【DS离心泵】之撰 1132

使用minGW创建DLLs

使用minGW创建DLLs 不灵活优雅的方式 首先,我们将创建一个DLL,只导出一个非常基本的函数,该函数将两个整数相加并返回结果。注意到下方代码中的“__declspec(dllexport)”,这是从DLL导出函数的关键。你想从DLL中导出的每个函数该用这个标记(任何不构成API一部分的内部函数该保持原样)。另外,注意函数名前面的“__cdecl” 它声明了函数的调用约定(如果你不熟悉,请参阅Wikipedia关于x86调用约定的文章)。MinGW中C函数的默认调用约定是cdecl,但

lsxht95的博客 1820

extern "C" 的用意

前些天,编程序是用到了很久以前写的C程序,想把里面的函数利用起来,连接发现出现了不到具体函数的错误:以下是假设旧的C程序库C的头文件/*-----------c.h--------------*/#ifndef _C_H_#define _C_H_extern int add(int x, int y);#endifC的源文件/*-----------c.c-

llbird的C/C++世界 1万+

mingw安装以及c++.Dll生成导出

即可生成,a .dll .def 等文件。其次创建.cpp文件,定义函数注意:多余空格会报错!其中类的导入实例.h。

lzh_made_wall的博客 835

IDE/mingw下动态库(.dll.a文件)的生成部署使用(对比MSVC下.dll.lib)

本文编写了QtCreator + mingW 集成开发环境下的动态库生成使用方法的示例程序,分析了mingw下动态库项目编译生成的\*.a文件的作用到底是什么,并在此基础上,成功解决了历史遗留问题mingW下的dll为何可直接参与编译链接过程,而msvc下的dll只参与执行过程? 本文对比分析了mingwmsvc下动态库的部署使用上的不同。

Dahe.qu 6527

MinGW创建DLL

在许多情况下使用DLL是一个糟糕的主意,但对于新手来说学会如何创建DLL,尤其是一个免费的开发环境例如MinGW将意味着对开发工具的快速熟悉并能了解那些看起来隐含的选项。 在继续下面的内容之前,你该已经安装并且配置好了MinGW。同样你该对缺少IDE环境的编程比较熟悉,或者知道如何在IDE环境下使用MinGW。这里就不再对此进行详细说明了。 什么是DLL什么是DLL呢?DLL全称dynamic

城市过客的专栏 1312

MinGW 与 MSVC 生成 DLL 各种情况的折腾笔记

写这篇博客,主要是刚折腾 MinGW,相关内容网上的资料不全,而且错误很多 其实之前我根本没把这个当回事,我就想 MinGW 跟 Linux 上的 GNU 编译器不会有差别,但是事实却不是这样。。。 提示:所有代码均使用 __stdcall 安装 MSVC MinGW MSVC:安装 Visual Studio,之后即可在开始菜单中到“Visual Studio开发人员命令提示”,启

zuishikonghuan的博客 1万+

c语言 mingw生成dll,由MinGW编译出的.a生成VC下的.dll

使用MinGW编译一份库代码,可能是由于configure不好,导致只能生成.a文件,google发现一些方法,备份一下。以下为源自http://blog.henix.info/blog/mingw-a-convert-dll.html的原文,感谢原作者:最近遇到这样的问题:只有用 Cygwin 编译出来的静态库(.a),需要转换成可以在 VC++ 中调用 .dll .lib 。网上大多说的是...

weixin_35212962的博客 1770

dll.alib 引用MinGW生成的dll.a后出现的问题

在安装nlopt优化库的时候遇到了一个问题,就是安装包中没有.lib文件,只有.dll.a文件,所以就各种搜,终于到了一个解决办法,如下所示: 下面的文章转载自https://www.cnblogs.com/sanghg/p/4433885.html 以前很少调用MinGW的运行库,现在用到一个项目,用到了glibgettext等。 遇到了一个问题,折腾了一个下午。 gettext的运行时...

yuer的博客 6563

使用VS Code配置MinGW/MSYS解决中文乱码DLL缺失问题

通过以上配置,你可以在VS Code中使用MinGW/MSYS进行C/C++后端开发,并解决VS Code配置MinGW/MSYS解决中文乱码DLL缺失问题的方法。首先,确保已经安装了MinGW/MSYS。],],"-c",这些配置将解决C/C++代码中的中文乱码问题,并设置编译器路径标准。同时,它还将自动猜测文件编码、禁用缩进检测,并在终端中使用UTF-8编码。C:/MinGW导航到bin目录。将缺失的DLL文件复制到该目录。常见的DLL文件包括

AnHaskell的博客 372

MFC调用Qt使用MinGW编译的dll

最近因为项目需要,MFC调用Qt下使用MinGW编译的dll,从开始的调用基础函数,到后面调用Qt界面,到隔离Qt发布所需的dll到单独的目录,遇到了各种各样的问题,好在最终都顺利解决了,于是打算写一个专题讲述这个问题,由浅入深,特此分享,所有的工程都会完整提供,也是作为纪念,防止将来忘记了(虽然有代码备忘就是了)。 首先,先从最基础,最简单的入手。 第一步,创建Qt编译dll的工程,除了图中的选项选择c++ Library其他一路默认,生成一个名为EasyDll的工程。 其中头文件..

秋月的私语 1712

QT MinGW 编译使用GDAL

MinGW编译GDAL(转载:https://blog.csdn.net/qq_32629895/article/details/106147965) 如果不想编译可以查看我的这篇博客下载编译好的GDAL1.11.5 QT GDAL配置以及下载 1. 软件安装 从头说起 先说说必要的软件环境 1.1 在编译GDAL(mingw)之前你需要安装QT 以及 msys2(它是包含mingw32 mingw 64的) 1.1.1 QT安装按正常步骤在安装界面选填mingw部分即可 安装完之后 必须把

huang__c的博客 2672

如何在Qt中使用OpenCV(MinGW)

如何让Qt在MinGW环境下使用OpenCV,并提供了打包方法。以及解决了在Qt的UI中显示照片的问题

liujiahao_的博客 2523

mingw使用vs2015编译器编译FFMPEG

由于工作原因,需要在MINGW下编译出一个单独完整的FFMPEG 功能库(而不是avcodec/avformat等很多库)提供给WINDOWS UI使用。  折腾了好几天,下过msys2,ming64,都没有成功,貌似国外的网站访问这些资源速度很慢。 最后使用vs2015+mingw1.0来解决这个问题。 过程如下记录如下。 一、mingw下编译ffmpeg 考虑了如下几种方案:

anbinger2013的专栏 9625
上一篇: QScrollArea无法自动增大问题
下一篇: 改变编译器字节对齐条件的简单说明
二狗蹲坑
博客等级 码龄15年 30粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值