Как вы продаете библиотеку Go с привязкой Cgo?

У меня есть приложение Go 1.5, которое связывается с библиотекой C (GEOS, FWIW), используя cgo. Что мне нужно сделать, так это продвинуть его, чтобы его можно было в конечном итоге развернуть через нашу систему непрерывной интеграции. Проблема в том, что я не знаю, как убедить компоновщика связываться с библиотекой после ее продажи. После запуска godepфайл с директивой cgo .../vendor/.../geos.go, Там я создал каталог lib, добавил пять файлов.so из GEOS и изменил преамбулу на следующую:

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

Это работает только до определенного момента - когда я бегу go build он находит первую библиотеку, но не любую из последующих библиотек.

/ usr / bin / ld: warning: libgeos-3.4.2.so, необходимый для поставщика /github.com/paulsmith/gogeos/geos/lib/libgeos_c.so, не найден (попробуйте использовать -rpath или -rpath-link)

Как мне заставить всю вещь правильно связать?

1 ответ

Я получил следующие отзывы в автономном режиме:

Низкоуровневые зависимости C, такие как привязка cgo, упомянутая в переполнении стека, очень сложны и сложны для реализации, как вы можете себе представить. Вот почему в прошлом я просто либо обошел требования вендора, построив мой бинарный файл go (linux target) на локальном или CI-боксе и загрузив его с помощью бинарного buildpack-пакета, либо создал образ Docker с бинарным файлом моего приложения.,

Другими словами, не делайте то, что я предлагал. Просто постройте его по старинке.

Другие вопросы по тегам