我有一个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)
如何正确连接整个事物?
答案 0 :(得分:-1)
我离线获得了以下反馈:
低级别的C依赖关系,比如堆栈溢出中提到的cgo绑定是非常棘手的,并且很难像您想象的那样供应商。这就是为什么过去我只是通过在本地或CI盒子上构建我的go二进制文件(linux目标)并推动使用二进制buildpack或我用我的构建Docker镜像来绕过销售要求的原因。应用程序的二进制文件。
换句话说,不要做我的建议。只需用老式的方式构建它。