go的非常大的优势在于编译后是无依赖的,然而,如果go里面掺杂了c的代码(多半是要借助现有的c的类库),编译后的程序就有依赖了,就不能随便拿走运行了,还要安装依赖才能运行。
其实,c的程序也可以运行时无依赖的,就是所谓的静态编译,这个需要依赖库提供静态库文件;于是,cgo也能静态编译,使得编译后的程序无依赖。
尽管如此,静态编译是稍微麻烦一些的,所有的依赖库都需要有静态库文件,最终可能还是编译失败。
尝试一下mylg的静态编译:
1 |
go build --ldflags '--extldflags "-static -fpic"' . |
该工具依赖了libpcap