mingw dll msvc

如何使用minGW和SMVC两种方法编译.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; 阅读详情

1. linux 和 windows 对动态库的编译连接方式不同

linux: 编译时直接去连接动态库

windows: 编译时不是连接动态库,而是连接.LIB文件,而这个.LIB文件其实只是从动态库中导出的符号表

               (个人感觉windows真是多此一举,既然动态库中什么信息都有,为什么不直接连接动态库呢)

 

2. 跨平台编译器: mingw, cygwin

         偏好mingw, 虽然不能直接支持posix,但已经有第三方的posix库了,很方便。

 

3. 用mingw编译dll, lib文件

dll: 用标准的gnu动态库编译方法即可,例:"gcc -shared -o hello.dll hello.c"

lib: 首先说明,用mingw生成的lib在windows下可用,但是对于VC,呵呵,不能用(windows封闭,VC更封闭,微软在搞什么啊)

      (1) mingw 生成 lib文件

              a) 首先用mingw自带的dlltool生成要导出的符号定义文件,如:

                     dlltool -z hello.def --export-all-symbols hello.o

              b) 再用dlltool从动态库中导出.lib文件,如:

                     dlltool -k --dllname hello.dll --output-lib hello.lib --def hello.def

      (2) 如何生成VC用的lib

              用mingw编译出的dll库VC是可以直接用的,但是lib不行。需要调整.def和.lib的生成方法

              a) .def

                   用上文提到的"dlltool -z hello.def --export-all-symbols hello.o",生成的.def内容类似如下:

   

  1. EXPORTS  
  2.     hello @ 1  

                  问题就在于函数符号后面的"@ n",如果带上这个东西,在VC调用库时会出现乱序,明明调用的是函数A,

                  结果却进入了函数B中,原因不明,反正把这个东西去掉就行了。可以用sed命令来去除:

                          sed 's/ @ [0-9]*//g' hello.def

              b) .lib

                   必须用VC自带的"lib"工具来生成,使用时将上面生成的.dll和.def文件放在相同的目录下,然后在命令行下执行

                          lib /machine:i386 /def:hello.def

                    就会生成对应的hello.lib,大功告成,VC可以编译连接lib了

 

 

例子程序:http://download.youkuaiyun.com/source/3187967

其中Makefile编译常规的Linux版本, Makefile.mingw使用mingw工具链编译windows版本

细说MSVC和MinGW生成库的差异及如何相互调用 两个编译器的C++ ABI是不兼容的所以无法识别对方导出的符号完成链接,但是可以用C语言进行中转,C的ABI在所有编译器中都是相同的,也就是说把VC动态库所有导出接口都改为 extern “C” 形式即可,这样生成的动态库,MinGW和MSVC都可以相互链接。由于MSVC生成的静态库和MinGW生成的静态库ABI(Application Binary Interface)无法兼容、使用的标准库也不同(MinGW使用的GNU标准库、MSVC使用的微软标准库),所以两个编译器生成的静态不可以跨编译器相互调用; 阅读详情

相关推荐

VC 调用 MinGW 生成的dll(未测试)

首先,如果dll 中导出了C++的类,那么就不要折腾了。不同的编译器编译出来的C++代码是不保证通用的。如果dll中只是一些C 函数,那么是可以互相调用的。 MinGW 生成dll时即使生成了 .a 文件也是不能用到VC 上的(至少我用的VC2010版本是不行了,表现为生成的程序 Debug模式下可以运行,但是Release 模式下却无法运行)。 如果生成dll时也生成的def文件那么可以这样: 比如我的dll 文件叫做 test.dll ,对应的def文件为 test.def 执行下面这条语句: LIB

我不是码农的博客~~~ 1073

mingw和MSVC 编译出来的动态库与静态库通用吗

1. 背景: 我的项目是使用MinGW 编译的, 在引入第三方、或者其他人开发的静态库使用MSVC 库编译出来的,这时候编译的是就会报好多E:*******: error: undefined reference to `__imp__ZN7mysqlpp10ConnectionC1Eb'。 当时用第三方库是使用使用MSVC 库编译出来 动态库的时候没有问题, 2. 在网上收了一把。如下是有用的回答: 都是很好用的编译工具,但是他们兼容的并不好。当你的项目使用MinGW编译的使用,想要用一个MSV.

caolinqing1的专栏 1万+

安卓模拟器绕过检测全解析:雷电、MuMu、蓝叠、逍遥、夜神与WSA完整指南

随着手机游戏和应用的普及,越来越多的用户选择在PC上通过模拟器来运行安卓应用。然而,许多应用和游戏为了防止作弊或出于安全考虑,会检测是否运行在模拟器环境中。本文将详细介绍各大主流模拟器的检测绕过方法,帮助用户在电脑上流畅体验各类安卓应用。1. 获取模拟器系统镜像2. 使用ROM厨房工具修改系统文件3. 替换模拟器的系统镜像雷电模拟器:适合游戏,推荐使用MAGISK + EdXposed方案MuMu模拟器:适合中度游戏,推荐太极框架蓝叠模拟器:适合国际应用,推荐MAGISK方案逍遥模拟器。

专注技术分享 3万+

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

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

zuishikonghuan的博客 1万+

5分钟搞定PettingZoo多智能体环境搭建:从安装到运行第一个Demo

本文详细介绍了如何在5分钟内完成PettingZoo多智能体环境的搭建,从安装到运行第一个Demo。通过精准的版本控制和常见问题解决方案,帮助开发者快速上手多智能体强化学习(MARL)环境配置,并提供了实战案例和性能优化技巧。

backprop5master的博客 221

图形学基础知识:着色(三)Rendering Pipeline与Shader

管线(Pipeline) 什么是管线? 管线我们可以理解为流水线,流水线大家都懂,就是工厂里面生产东西的一整套流程。例如饮料厂要生产饮料,需要洗瓶子,倒饮料,加盖,包装等等,这一整套过程就是流水线。那么我们要把一个三维场景渲染成一幅二维的图像,同样需要一个先干嘛再干嘛然后干嘛最后干嘛的过程,这个过程或流水线,我们就称之为管线。 实时渲染管线(Real-time Rendering Pipeline) 通过前面几篇的学习,我们知道了要把一个三维场景渲染成一幅二维的图像大致分为以下几个步骤: M.

王王王渣渣的博客 2533

在 MinGW 中调用 MSVC 编译的 DLL

在 MinGW 中调用 MSVC 编译的 DLL 【下载地址】在MinGW中调用MSVC编译的DLL 该项目为开发者提供了详细的指南,帮助在 MinGW 环境中调用 MSVC 编译的 DLL 文件。通过探讨兼容性、配置步骤及常见问题解决方案,项目旨在解决跨编译器的动态链接库调用难题。无论是确认 DLL 的编译环境、设置 ...

gitblog_06777的博客 886

【异常】解决JDK21升级中的SecurityException: JCE无法验证BC提供者问题

本文详细解析了JDK21升级中常见的SecurityException: JCE无法验证BC提供者问题的根源与解决方案。核心在于JDK21强化了JCE安全验证,导致签名不合规的老版本Bouncy Castle库被拒绝。文章提供了通过Maven依赖树精准定位、排除旧版本并引入兼容的bcprov-jdk18on新库的完整步骤,以及清理缓存等实战技巧,帮助开发者彻底解决此兼容性问题。

weixin_29197051的博客 491

MSVC和MinGW导出的.dll.a和.lib相互调用

MSVC和MinGW导出的.dll.a和.lib相互调用

itas109的专栏 4192

FANUC机器人KAREL编程实战:手把手教你用SOCKET指令连接外部设备(附完整.KL文件)

本文详细解析了FANUC机器人KAREL编程中SOCKET指令的应用,从开发环境配置到工业级通讯全流程,涵盖网络参数设置、模块化代码设计、错误处理及现场调试技巧。通过实战案例,帮助开发者掌握与外部设备稳定连接的关键技术,提升工业自动化系统的通讯可靠性。

weixin_30907935的博客 226

广义正态分布优化算法(GNDO)详解:从理论到实践

广义正态分布优化算法(GNDO)是一种基于正态分布理论的新型元启发式优化算法。该算法通过局部开发和全局探索两种策略平衡搜索过程:局部开发利用广义平均位置和标准差进行精细搜索,而全局探索通过随机个体信息共享扩大搜索范围。GNDO具有参数少、结构简单、收敛速度快等优点,在光伏模型参数提取等工程优化问题中表现优异。算法将种群位置更新与正态分布参数调整相联系,通过自适应机制平衡探索与开发,数学分析表明其具有全局收敛性。相比传统优化算法,GNDO在探索能力和开发能力上均有优势,是高维复杂优化问题的有效解决方案。

qq_42212808的博客 138

MSVC vs. MinGW 之dll玩转攻略手记

MinGW: c -> o gcc -c a.c c -> exe gcc a.c libs.o -o a.exe (从主程序a.c,附加libs,生成a.exe) o -> exe gcc a.o b.o ... -o main.exe c -> dll,def,a gcc a.c -shared -o a.dll -Wl,--output-def,a.def,--out-implib,

深之JohnChen的专栏 8820

【Claude】Claude Code 子代理(Subagents)完全指南:多 AI 编排与并行任务管理

子代理是在独立上下文窗口特性主代理子代理上下文窗口与你对话的主上下文完全独立的上下文工具权限拥有所有工具可自定义限制生命周期整个会话完成任务后结束通信方式直接对话结果返回给主代理模型继承主会话设置可指定不同模型你可以创建专属子代理,指定模型、工具权限和系统提示。在对话中,Claude 会根据任务自动选择合适的子代理。

博客 5538

MSVC和MinGW的DLL工具

__stdcall调用约定已经产生很长的时间了,一些老的调用约定如__pascal正被逐渐废弃,而__stdcall却成为了Win32 API的标准调用约定。和__cdecl(C/C ++默认调用约定)不同,__stdcall被C/C++、Visual Basic、Java等语言支持,使得它成为跨语言调用的DLL的首选调用约定。 在内部,__cdecl和__stdcall函数有一些命名修饰。比如

firstime_tzjz的专栏 2750

SAP GR(Group Reporting)配置篇(五)

1.5、合并的货币换算1.5.1指定折算比率菜单路径组报表的SAP S4HANA >合并的货币换算>-指定折算汇率事务代码GCRF说 明1.5.2维护汇率菜单路径组报表的SAP S4HANA >合并的货币换算>维护汇率事务代码CXCC/OB08说 明实际测试的时候根据实际情况维护汇率。输入换算比率。1.5.3定义汇率标识符菜单路径组报表的SAP S4HANA >合并的货币换算>定义汇率标识符事务代码OC41说 明配置了月末汇率和平均汇率。

weixin_43853754的博客 554

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

如何在 MinGW 和 Visual Studio (MSVC) 之间共享 DLL

dll.a。

weixin_44455665的博客 599

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

MSVC 和 MinGW DLL call each other

mingw dll msvc

visualassist4680的专栏 563

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

cmake:让mingw(gcc)生成MSVC可用的dll(.lib)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33701251的博客 1839

在MinGW中调用MSVC编译的DLL:实现编译器兼容性的利器

在MinGW中调用MSVC编译的DLL:实现编译器兼容性的利器 【下载地址】在MinGW中调用MSVC编译的DLL 该项目为开发者提供了详细的指南,帮助在 MinGW 环境中调用 MSVC 编译的 DLL 文件。通过探讨兼容性、配置步骤及常见问题解决方案,项目旨在解决跨编译器的动态链接库调用难题。无论是确认 DLL 的编...

gitblog_06758的博客 564

MSVC 和 minGW .a .dll 等文件之间转换

一、MSVC调用MINGW生成的dll和lib gcc -shared -o testdll.dll testdll.c-Wl,--output-def,testdll.def 生成dll文件和def文件 lib /machine:i386 /def:testdll.def 生成lib 文件和exp文件。(lib为MSVC的工具,可以在VS安装的bin目录下...

weixin_30876945的博客 782

Qt:编译器、MSVC、Mingw、dll调用

到底选择哪个版本,MinGW 比较方便,配置易上手适合初学者,MSVC功能强大,适合进阶,但是具体项目上要根据依赖的第三方库选择版本。如果你的第三方库是msvc的,能可能就必须msvc,如果第三方库是mingw的可能就必须mingw。跨平台开发的话,用的库基本上一定是Linux能用的库,而Linux能用的库一定是在mingw下支持会比较好。(mingw甚至能 include unistd.h 之类的Linux专用头文件),那就优选mingw。注意Qt版本:msvc和MinGW版本的区别。

m0_73482095的博客 4227

How can an MSVC program call an MinGW DLL?

 MSVC and MinGW DLL Interlinking FAQ<!--var PUpage="76001073"; var PUprop="geocities"; // --><!-- var thGetOv="http://themis.geocities.yahoo.com/themis/h.php"; var thCanURL="http://us.ge

chaosllgao的专栏 736

MSVC vs. MinGW 之 (lib,dll,def,obj,exe) vs (a,dll,def,o,exe) 玩转攻略手记

转自:http://hi.baidu.com/kaien_space/blog/item/ae765e0aa3de501695ca6bb9.html 一份粗糙的研究记录,有待补完和整理。 MinGW: c -> o           gcc -c a.c c -> exe         gcc a.c libs.o -o a.exe (从主程序a.c,附加libs,生成a.exe)

gavin的专栏 2141
上一篇: 如何从DLL中生成LIB文件
下一篇: The Anatomy of a Large-Scale Hypertextual Web Search Engine
夜泊枫桥
博客等级 码龄19年 99粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值