作者:yehuohan
来源:CSDN
原文:https://blog.csdn.net/yehuohan/article/details/52090282
版权声明:本文为博主原创文章,转载请附上博文链接!
相关说明
MinGW32和MinGW-w64:
MinGW32先开发,只能编译32位程序;
MinGW-w64从MinGW32发展而来,支持编译64和32位位程序,同时可以进行交叉编译。
MinGW-w64类型:
x86_64: 支持在x64和x86上运行
i686: 支持在x86上运行
i386/i686/x86_64区别
i386 适用于intel和AMD所有32位的cpu,以及采用X86架构的32的cpu。
X86_64 适用于intel和AMD采用X86架构的64位cpu,兼容32位。
I686 只是i386的一个子集,支持的cpu从Pentium 2 (686)开始,之前的型号不支持。
关于mingw-w64-x86_64:
生成64位库只要用默认的参数编译即可,而生成32位库则要用-m32参数编译.
对于mingw-w64-i686:
默认生成32位程序
对于seh sjlj dwrf区别
SJLJ (setjmp/longjmp):
available for 32 bit and 64 bit
DWARF (DW2, dwarf-2):
available for 32 bit only
SEH (zero overhead exception):
will be available for 64-bit GCC 4.8.
详情见
http://qt-project.org/wiki/MinGW-64-bit
Msys说明
MSYS是“Minimal SYStem”的缩写,是一个Bourne Shell命令行解释器,也是MinGW的补充,用来在MS Windows上移植一些开源的程序。
Msys2说明
MSYS2(Minimal SYStem 2)是一个MSYS的独立改写版本,主要用于 shell 命令行开发环境。同时它也是一个在Cygwin (POSIX 兼容性层) 和 MinGW-w64基础上产生的,追求更好的互操作性的 Windows 软件。
安装Msys2
Msys2现在维护得更好,软件更新更方便,推荐使用Msys2,同时这里将不再介绍msys的安装过程。
下载Msys2
到Msys2官网 下载最新版Msys2。
可以下载exe安装包,也可以下载压缩包,解压出来的文件夹为msys64(这里使用64位)。
安装软件
Msys2使用pacman管理软件。pacman的基本使用如下:
pacman -S
pacman -U
pacman -Syu # 同步Msys2源,并更新
pacman -Sy # 仅同步源
pacman -Su # 更新系统
pacman -Sy
pacman -R
pacman -Rs
pacman -Rd
pacman -Ss
pacman -Qi
1
2
3
4
5
6
7
8
9
10
11
安装Msys2后,或解压Msys2后,第一次运行下msys2_shell.cmd,提示第一次设置初始化完毕后,就可以运行Msys2.exe、mingw64.exe或mingw32.exe,主要区别:
# mingw32 优先使用 msys64/mingw32 下的工具;
# mingw64 优先使用 msys64/mingw64 下的工具;
# msys2 两个都不使用,只用自身 msys 的工具;
1
2
3
升级msys2
一般第一次打开msys2用“pacman -Syu”全面升级,然后会提示关闭终端,再次打开后再一次运行”pacman -Syu”。
若是不想升级可以直接用pacman安装自需要的软件,如vim,git,gcc(即MinGw)等。
安装Vim
使用命令:
pacman -S vim
1
即可以安装vim。安装完后在Msys2的~/下touch一个.vimrc,里面加入设置:
set bs=2
1
不然vim在插入模式下的退格不能用。
注意事项1:
Msys2的配置文件(~/.gitconfig, ~/.ssh/, ~/.vimrc等都在home下,注意别随便删除 )。
注意事项2:
将Msys64/usr/bin加入windows环境变量中后,就可以在cmd中直接使用Msys2中安装的vim,git等软件(如以编写bat脚本,使用git管理软件版本)
安装MinGw-w64
可以通过pacman直接安装MinGw-w64,也可以下装安装包自,自己放置,pacman一条命令的事,这里讲下自己手动安装。
下载
使用mingw-w64-install.exe下载,图像界面,简单方便。
也可以直接下载编译好的版本,然后到下列路径下载相应的版本:
i686 => Home / Toolchains targetting Win32 / Personal Builds / mingw-builds
x86_64 => Home / Toolchains targetting Win64 / Personal Builds / mingw-builds
(这里以下载的x86_64-5.3.0-release-posix-sjlj-rt_v4-rev0.7z为例)
安装:
无论是exe安装还是自己解压缩,最好直接将到mingw64文件夹直接放在/Msys64/mingw64下,(原本就已经建好mingw64,直接合并即可),因为Msys2可以自动设置/Msys64/mingw32和/Msys64/mingw64的路径,不需要自己再往/etc/profile添加路径。此时,打开/Msys64/mingw64.exe后就可以使用gcc了。
不过windows的cmd还不能直接用,因为还没添加windows环境变量。同时要注意,即使设置好mingw64的windows环境变量,Msys2也不会读取。
添加mingw64的windows环境变量:
添加 D:\msys64\mingw64\bin到PATH环境变量中,打开cmd就可使用gcc了,如:
gcc -v
//用此命令可以查看gcc版本。
1
2
添加MingW64的32位环境变量:
添加X:\Msys64\mingw64\x86_64-w64-mingw32\lib32到环境变量PATH中。
编译32位程序:
gcc -m32 main.c -o main
# 生成32位的main程序
windres --target=pe-i386
# 对于32位程序资源文件的编译,需要添加pe-i386参数
1
2
3
4
5
添加”make”:
将D:\Msys64\mingw64\bin\mingw32-make.exe复制一份,重命名为make.exe,这样在windows下就可以使用make命令了。
编译vs使用的lib库
生成lib
// generate def file
gendef xxx.dll
// generate lib file
dlltool -D xxx.dll -d xxx.def -l xxx.lib
1
2
3
4
MinGw未生成.dll动态库
// 在configure时使用下面的参数
./configure --disable-static --enable-shared
1
2
直接使用.dll.a
mingw编译出来的静态库后缀名为.a,编译出来的动态库的导入库后缀名为.dll.a,而在windows下后缀名为.lib的库可能是静态库也可能是动态库的导入库。
mingw编译出来的动态库的导入库.dll.a可以直接在vc中直接使用,例如:
#pragma comment(lib, "xxx.dll.a")
---------------------