Go, cgo in windows

Windows 下配置cgo环境:

  • 安装go,将C:\Go\bin添加到Path环境变量中
  • 安装mingw, 将C:\MinGW\bin;C:\MinGW\msys\1.0\bin添加到Path环境变量中,如果go build xx.go报“cc1.exe: sorry, unimplemented: 64-bit mode not compiled in”的错误(32位gcc不能将代码编译64位的应用),则需下载mingw64:http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/4.8.2/threads-posix/seh/x86_64-4.8.2-release-posix-seh-rt_v3-rev2.7z/download 下载后直接覆盖替换C:\MinGW
  • 写C库,编译打包成libxx.a或者libxx.so。
  • # 静态库
    gcc -O2 -Wall -c -O x1.c x2.c
    ar -rcu libxx.a x1.o x2.o
    # 动态库
    # gcc -c -fPIC -share  -O x1.c x2.c
    # gcc -O -fPIC -share -o libxx.so x1.o x2.o
  • 编写go文件调用C
  • package main
    import "fmt"
    /*
    #cgo LDFLAGS: -L. -lxx
    #include "xx.h"
    */
    import "C"
    
    func main(){
            fmt.Println(C.xxMethod(1,1))
    }

    [*] 发布go应用时,可以使用优化选项
    go build -ldflags '-s -w' xx.go
    (go install类似)
    -s去掉符号表(然后panic时候的stack trace就没有任何文件名/行号信息了,
    这个等价于普通C/C++程序被strip的效果),
    -w去掉DWARF调试信息,得到的程序就不能用gdb调试了。
    编译C时使用O2选项
    gcc -c -O -O2 -m64 -pthread -g x1.c x2.c


    References:
    http://blog.csdn.net/mecho/article/details/24305369

    你可能感兴趣的:(windows)