Как вы продаете библиотеку 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 с бинарным файлом моего приложения.,
Другими словами, не делайте то, что я предлагал. Просто постройте его по старинке.