【问题标题】:How do you vendor a Go library with a Cgo binding?您如何提供具有 Cgo 绑定的 Go 库?
【发布时间】:2016-10-17 01:40:00
【问题描述】:

我有一个使用 cgo 与 C 库(GEOS、FWIW)绑定的 Go 1.5 应用程序。我需要做的是供应商,以便最终可以通过我们的持续集成系统进行部署。问题是我不知道如何说服链接器在出售后与库链接。运行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 -链接)

如何让整个内容正确链接?

【问题讨论】:

    标签: go cgo vendor


    【解决方案1】:

    我离线收到以下反馈:

    低级别的 C 依赖项,如堆栈溢出中提到的 cgo 绑定非常棘手,并且难以提供您可以想象的供应商。这就是为什么在过去,我要么通过在本地或 CI 机器上构建我的 go 二进制文件(linux 目标)并使用二进制 buildpack 推送来绕过供应商要求,要么我在其中构建了一个包含应用程序二进制文件的 Docker 映像.

    换句话说,不要按照我的建议去做。用老式的方式构建它。

    【讨论】:

      猜你喜欢
      • 2022-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-12
      • 2020-08-30
      • 1970-01-01
      • 1970-01-01
      • 2021-10-17
      相关资源
      最近更新 更多