Bootstrap

Go, cgo in windows

Windows 下配置cgo环境:


[*] 安装go,将C:\Go\bin添加到Path环境变量中
[*] 安装mingw, 将[i][b]C:\MinGW\bin;C:\MinGW\msys\1.0\bin[/b][/i]添加到Path环境变量中,如果go build xx.go报“cc1.exe: sorry, unimplemented: 64-bit mode not compiled in”的错误(32位gcc不能将代码编译64位的应用),则需下载mingw64:[url]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[/url] 下载后直接覆盖替换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:
[url]http://blog.csdn.net/mecho/article/details/24305369[/url]
;