您如何使用Cgo绑定提供Go库?

时间:2016-06-15 19:12:41

标签: go cgo vendor

我有一个Go 1.5应用程序,它使用cgo与C库(GEOS,FWIW)绑定。我需要做的是提供它,以便最终可以通过我们的持续集成系统进行部署。问题是,我不知道如何说服链接器在销售后链接到库。运行godep后,带有cgo指令的文件为.../vendor/.../geos.go。我在那里创建了一个lib目录,添加了GEOS的五个.so文件,并将序言改为:

/*
#cgo LDFLAGS: -L${SRCDIR}/lib -lgeos_c
#include "geos.h"
*/
import "C"

这只适用于某一点 - 当我运行go build时,它会找到第一个库,但不会找到任何连续的库。

  

/ usr / bin / ld:警告:libgeos-3.4.2.so,由vendor / github.com / paulsmith / gogeos / geos / lib / libgeos_c.so所需,找不到(尝试使用-rpath或-rpath -link)

如何正确连接整个事物?

1 个答案:

答案 0 :(得分:-1)

我离线获得了以下反馈:

  

低级别的C依赖关系,比如堆栈溢出中提到的cgo绑定是非常棘手的,并且很难像您想象的那样供应商。这就是为什么过去我只是通过在本地或CI盒子上构建我的go二进制文件(linux目标)并推动使用二进制buildpack或我用我的构建Docker镜像来绕过销售要求的原因。应用程序的二进制文件。

换句话说,不要做我的建议。只需用老式的方式构建它。