标签:c代码 依次 文件 管理工具 官方 函数 win 比较 pkg
pkg-config
工具的支持。 我们可以通过#cgo pkg-config xxx
命令来生成xxx库需要的编译和链接参数,其底层通过调用 pkg-config xxx --cflags
生成编译参数,通过pkg-config xxx --libs
命令生成链接参数。 需要注意的是pkg-config
工具生成的编译和链接参数是C/C++公用的,无法做更细的区分。pkg-config
工具虽然方便,但是有很多非标准的C/C++库并没有实现对其支持。 这时候我们可以手工为pkg-config工具创建对应库的编译和链接参数实现支持。Name: xxx
Cflags:-I/usr/local/include
Libs:-L/usr/local/lib –lxxx2
Cflags
和Libs
行分别对应xxx使用库需要的编译和链接参数。如果bc文件在其它目录, 可以通过PKG_CONFIG_PATH
环境变量指定pkg-config
工具的检索目录。PKG_CONFIG
环境变量可指定自定义的pkg-config
程序。 如果是自己实现CGO专用的pkg-config
程序,只要处理--cflags
和--libs
两个参数即可。// py3-config.go
func main() {
for _, s := range os.Args {
if s == "--cflags" {
out, _ := exec.Command("python3-config", "--cflags").CombinedOutput()
out = bytes.Replace(out, []byte("-arch"), []byte{}, -1)
out = bytes.Replace(out, []byte("i386"), []byte{}, -1)
out = bytes.Replace(out, []byte("x86_64"), []byte{}, -1)
fmt.Print(string(out))
return
}
if s == "--libs" {
out, _ := exec.Command("python3-config", "--ldflags").CombinedOutput()
fmt.Print(string(out))
return
}
}
}
$ go build -o py3-config py3-config.go
$ PKG_CONFIG=./py3-config go build -buildmode=c-shared -o gopkg.so main.go
go get
获取Go语言包的同时会获取包依赖的包。比如A包依赖B包,B包依赖C包,C包依赖D包: pkgA -> pkgB -> pkgC -> pkgD -> ...。再go get获取A包之后会依次线获取BCD包。 如果在获取B包之后构建失败,那么将导致链条的断裂,从而导致A包的构建失败。不支持某些系统, 编译失败
依赖 cgo, 用户没有安装 gcc
依赖 cgo, 但是依赖的库没有安装
依赖 pkg-config, windows 上没有安装
依赖 pkg-config, 没有找到对应的 bc 文件
依赖 自定义的 pkg-config, 需要额外的配置
依赖 swig, 用户没有安装 swig, 或版本不对
标签:c代码 依次 文件 管理工具 官方 函数 win 比较 pkg
原文地址:https://www.cnblogs.com/binHome/p/12994920.html