golang cgo windows mingw64 环境搭建

木猫尾巴 · · 4478 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

[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 主要有三种不同的线程库的定义,分别是 Win32OS/2,以及 POSIX
前两种定义只适合于他们各自的平台,而 POSIX wiki 定义的线程库是适用于所有的计算平台的,故肯定使用 threads-posix

C++ Exceptions有三种处理方式

  • DWARF 不传递错误,需要使用DWARF-2(或DWARF-3)调试信息,生成的包会很大
  • SJLJ 长跳转,即使抛出异常也正常的执行,可以在没有使用GCC编译的代码或者没有调用堆栈展开信息的代码中工作
  • SEH 结构化异常处理,Windows使用自己的异常处理机制

下载 MinGW

这里选择的是 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 来执行

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:木猫尾巴

查看原文:golang cgo windows mingw64 环境搭建

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

4478 次点击  
加入收藏 微博
被以下专栏收入,发现更多相似内容
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传