[TOC]
准备
- 网络一定要ok
- 提前安装好 cmder 或者 cygwin,涉及大量命令操作,而windows本身命令行非常难用,不适合开发
安装 Mingw-w64
MinGW全称Minimalist GNU For Windows,是个精简的Windows平台C/C++、ADA及Fortran编译器
相比Cygwin而言,体积要小很多,使用较为方便。
MinGW提供了一套完整的开源编译工具集,以适合Windows平台应用开发,且不依赖任何第三方C运行时库
MinGW包括:
- 一套集成编译器,包括C、C++、ADA语言和Fortran语言编译器
- 用于生成Windows二进制文件的GNU工具的(编译器、链接器和档案管理器)
- 用于Windows平台安装和部署MinGW和MSYS的命令行安装器(mingw-get)
- 用于命令行安装器的GUI打包器(mingw-get-inst)
MingW 分 32位和64位版本:下载地址分别如下:
http://sourceforge.net/projects/mingw/
http://sourceforge.net/projects/mingw-w64/
gcc 主要有三种不同的线程库的定义,分别是 Win32
,OS/2
,以及 POSIX
前两种定义只适合于他们各自的平台,而 POSIX wiki 定义的线程库是适用于所有的计算平台的,故肯定使用 threads-posix
C++ Exceptions有三种处理方式
- DWARF 不传递错误,需要使用DWARF-2(或DWARF-3)调试信息,生成的包会很大
- SJLJ 长跳转,即使抛出异常也正常的执行,可以在没有使用GCC编译的代码或者没有调用堆栈展开信息的代码中工作
- SEH 结构化异常处理,Windows使用自己的异常处理机制
下载 MinGW
- 下载 Mingw-w64 Mingw-w64 sourceforge
这里选择的是 Mingw-w64 win64 Personal Builds
8.1.0 posix seh x86_64-8.1.0-release-posix-seh-rt_v6-rev0
安装 MinGW
直接下载解压即可,解压的目录 %MINGW64_HOME%
,将 %MINGW64_HOME%\bin
配置在环境变量 Path 中
然后命令行输入 gcc -v
打印
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/lto-wrapper.exe
Target: x86_64-w64-mingw32
Configured with: ../../../src/gcc-8.1.0/configure --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --prefix=/mingw64 --with-sysroot=/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64 --enable-shared --enable-static --disable-multilib --enable-languages=c,c++,fortran,lto --enable-libstdcxx-time=yes --enable-threads=posix --enable-libgomp --enable-libatomic --enable-lto --enable-graphite --enable-checking=release --enable-fully-dynamic-string --enable-version-specific-runtime-libs --disable-libstdcxx-pch --disable-libstdcxx-debug --enable-bootstrap --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with-gnu-as --with-gnu-ld --with-arch=nocona --with-tune=core2 --with-libiconv --with-system-zlib --with-gmp=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-mpfr=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-mpc=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-isl=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-pkgversion='x86_64-posix-seh-rev0, Built by MinGW-W64 project' --with-bugurl=https://sourceforge.net/projects/mingw-w64 CFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' CXXFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' CPPFLAGS=' -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' LDFLAGS='-pipe -fno-ident -L/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/lib -L/c/mingw810/prerequisites/x86_64-zlib-static/lib -L/c/mingw810/prerequisites/x86_64-w64-mingw32-static/lib '
Thread model: posix
gcc version 8.1.0 (x86_64-posix-seh-rev0, Built by MinGW-W64 project)
配置全局 make
进入mingw64 的安装目录,新建文件 make.bat
内容为
@echo off
C:\mingw64\bin\mingw32-make.exe %1 %2 %3 %4 %5 %6 %7 %8 %9
注意目录按安装目录来
保存后测试配置
$ make -v
GNU Make 4.2.1
Built for x86_64-w64-mingw32
Copyright (C) 1988-2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
golang 在win下交叉 cgo 编译注意
- cygwin 本身也能安装 GNU 的 make 或者 gcc 工具链,但是非常容易出现不能编译的问题,故建议使用 mingw64 的 gcc
- cygwin 本身只作为一个备用编译方案,如果 mingw64 出现问题,可以切换到 cygwin 来执行