2016-06-15 21 views
1

Ich habe eine Go 1.5-Anwendung, die mit einer C-Bibliothek (GEOS, FWIW) mit cgo bindet. Was ich tun muss, ist es zu verkaufen, damit es letztendlich durch unser kontinuierliches Integrationssystem bereitgestellt werden kann. Das Problem ist, dass ich nicht weiß, wie ich den Linker dazu bringen kann, mit der Bibliothek zu verlinken, sobald sie in den Vendor-Modus gelangt ist. Nach der Ausführung von godep lautet die Datei mit der cgo-Direktive .../vendor/.../geos.go. Ich habe ein lib dort aufgenommen in den fünf .so-Dateien von GEOS, und änderte die Präambel der folgenden:Wie liefert man eine Go-Bibliothek mit einer Cgo-Bindung?

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

Dies funktioniert nur bis zu einem Punkt - wenn ich go build führen Sie es die erste Bibliothek findet aber nicht eine der nachfolgenden Bibliotheken.

/usr/bin/ld: Warnung: libgeos-3.4.2.so, nach Anbieter benötigt/github.com/Paulsmith/gogeos/GEOS/lib/libgeos_c.so, wurde nicht gefunden (versuchen -rpath mit oder -rpath-link)

Wie bekomme ich das Ganze richtig verlinken?

Antwort

-1

Ich habe folgendes Feedback offline:

Die Low-Level-C Abhängigkeiten, wie die CGO im Stapelüberlauf erwähnte Bindung sind super kompliziert, und sind zu Anbieter schwierig, wie Sie sich vorstellen können. Aus diesem Grund habe ich in der Vergangenheit einfach die Herstelleranforderungen umgangen, indem ich mein go binary (linux target) auf einer lokalen oder CI-Box erstellt habe und mit dem binären buildpack gepusht habe oder ein Docker-Image mit dem Binärcode meiner Anwendung erstellt habe .

Mit anderen Worten, tun Sie nicht, was ich vorschlug. Baue es einfach auf altmodische Weise.