cmake:让mingw(gcc)生成MSVC可用的dll(.lib)----mark亲测有效

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cmake:让mingw(gcc)生成MSVC可用的dll(.lib)----mark亲测有效相关的知识,希望对你有一定的参考价值。

参考技术A minggw(gcc)编译出来的动态库(DLL),默认是没有MSVC连接动态库所需要的lib文件的。

关于MSVC的DLL和LIB的作用和区别,请参考这篇博文,讲得很透彻了–>《DLL和LIB的区别》

那么如果VC要链接gcc生成的DLL,却没有lib文件怎么办?
对于这个问题网上都有解决的办法,这篇文章讲到一些办法,可供收藏《VC6 调用GCC的DLL》,对于没有提供lib的DLL都可以用这篇文章提供的办法试试。

如果项目中不同的模块用不同的编译器编译,这时如果gcc编译的DLL没有import library(lib文件),可以通过cmake设置选项来解决。

CMAKE有一个GNUtoMS参数就是解决这个问题的。

GNUtoMS
Convert GNU import library (.dll.a) to MS format (.lib).

When linking a shared library or executable that exports symbols using GNU tools on Windows (MinGW/MSYS) with Visual Studio installed convert the import library (.dll.a) from GNU to MS format (.lib). Both import libraries will be installed by install(TARGETS) and exported by install(EXPORT) and export() to be linked by applications with either GNU- or MS-compatible tools.

CMAKE_GNUtoMS
Convert GNU import libraries (.dll.a) to MS format (.lib).

This variable is used to initialize the GNUtoMS property on targets when they are created. See that target property for additional information.(这个变量用来初始化GNUtoMS属性)

在用cmake生成Makefile时,设置GNUtoMS就可以解决这个问题。有两种途径:

shell命令行方式
如下在命令行中-D定义一个为bool类型的CMAKE_GNUtoMS参数为ON,就指示在编译时对dll生成.lib的import library

cmake %source_folder% -G “Eclipse CDT4 - MinGW Makefiles” -DCMAKE_GNUtoMS:BOOL=ON

cmak-gui
如下在cmake-gui界面中将CMAKE_GNUtoMS选项勾选,再点<generate>按钮生成Makefile

这里写图片描述

然后执行make编译项目的过程中,生成dll时会输出(前提是你安装了VC编译器)

Setting environment for using Microsoft Visual Studio 2010 x64 tools.

Microsoft (R) Library Manager Version 10.00.30319.01

Copyright (C) Microsoft Corporation. All rights reserved.

正在创建库 libturbojpeg.lib 和对象 libturbojpeg.exp

编译完成后,你就会发现所有的dll都有对应的lib文件了。
link: http://www.voidcn.com/article/p-tlmilzjf-ca.html

QT中如何把msvc编译器换成mingw编译器

这两种编译器可以让用户自行选择使用哪一种吗?具体怎么操作?谢谢!

参考技术A 把msvc的Qt卸载,然后在官网下载自带MinGW的Qt版本,傻瓜式的next。MinGW版本的Qt很容易安装 参考技术B 这两个不兼容

以上是关于cmake:让mingw(gcc)生成MSVC可用的dll(.lib)----mark亲测有效的主要内容,如果未能解决你的问题,请参考以下文章

使用 gcc 和 msvc 工具集生成的库

QT中如何把msvc编译器换成mingw编译器

mingw-w64和Linux下的GCC有区别吗

cmake:VS2015和GCC编译cJSON

mingw 包含哪些

msvc MinGW gcc g++关系