mingw dll msvc

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内容类似如下:

   

                  问题就在于函数符号后面的"@ 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版本

<think>嗯,用户想了解MinGWMSVC在C++开发中的差异和用途。首先,我需要回忆这两个编译器的基本信息和主要区别。MinGW是GNU工具链的Windows移植版,而MSVC是微软的官方编译器。接下来,我得考虑它们的架构支持、标准兼容性、运行时库等方面的不同。 用户可能关心编译后的程序依赖,比如是否需要额外的DLLMSVC通常依赖Microsoft Visual C++ Redistributable,而MinGW可能静态链接以减少依赖。还有,性能方面是否有差异?比如优化选项的不同可能导致生成代码的效率不同。 另外,开发环境集成也是一个重点。MSVC与Visual Studio深度集成,适合Windows平台开发,而MinGW可能更适合跨平台项目或在其他编辑器中使用。许可证方面,MSVC是专有软件,而MinGW基于GPL,这对开源项目可能有影响。 用户可能还想知道实际应用场景,比如开发跨平台应用应该选哪个,或者游戏开发中哪个更合适。需要举例说明,比如Qt项目常用MinGW,而DirectX开发多用MSVC。还要提到调试工具、编译速度、二进制兼容性等问题。 需要确保回答结构清晰,分点比较,并引用提供的参考资料。比如引用[1]提到MinGW不需要第三方C运行时库,而MSVC需要。同时,可能生成相关问题,帮助用户进一步了解。</think>### MingW vs MSVC 的差异及用途分析 #### 1. **核心架构与许可证** - **MingW**:基于 GNU 工具链(如 GCC),采用 GPL 许可证,支持生成原生 Windows 可执行文件且**无需依赖第三方 C 运行时库**[^1]。 - **MSVC**:微软专有编译器,深度集成于 Visual Studio,需依赖 `Microsoft Visual C++ Redistributable` 运行时库。 #### 2. **标准支持与性能** - **C++标准支持**: - MingW 的 GCC 通常更快支持新标准(如 C++20 模块) - MSVCWindows 专属特性(如 COM/DirectX)支持更优 - **代码优化**: $$ \text{MingW 的 GCC 常用优化选项: -O2/-O3}$$ $$ \text{MSVC 的优化器对 SIMD 指令自动向量化更积极} $$ #### 3. **开发环境对比** | 特性 | MingW | MSVC | |--------------------|------------------------|--------------------------| | 调试器 | GDB | Visual Studio Debugger | | 编译速度 | 较快(增量编译弱) | 较慢(增量编译强) | | 跨平台构建 | 支持 Linux/macOS 交叉编译 | 仅限 Windows | #### 4. **二进制兼容性** - **MingW**:生成 `.o` 文件使用 COFF 格式,可通过 `dlltool` 创建 Windows DLL - **MSVC**:默认使用 `.obj` 和 `.lib`,在混合编程时需注意: ```bash # MingW 调用 MSVC DLL 时需要显式符号转换 __declspec(dllimport) void __cdecl func(); ``` #### 5. **典型应用场景** - **选 MingW**: - Qt 应用程序开发(如 QGIS) - 跨平台开源项目(如 FFmpeg) - 需要静态链接减少依赖的场景 - **选 MSVC**: - DirectX 游戏开发 - COM/ATL 组件开发 - 与企业版 Visual Studio 协作(如 Azure DevOps) --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

duanbeibei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值