Как статически связать внешние библиотеки Go - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть небольшое приложение, написанное на Голанге, которое использует Oci8 для подключения к базе данных Oracle.Когда я пытаюсь запустить двоичный файл, созданный на моем Macbook, на другом Macbook (той же версии ОС), он завершается с ошибкой:

dyld: Library not loaded: @rpath/libclntsh.dylib.12.1
  Referenced from: /Users/{username_masked}/Documents/gitRepo/UserRevoke/./user_revoke
  Reason: image not found
Abort trap: 6

Я попытался скомпилировать со статической библиотекой как:

go build -a -ldflags '-extldflags "-static"' .

Сбой из-за следующей ошибки:

/ usr / local / go / pkg / tool / linux_amd64 / ссылка: запуск gcc не выполнен: состояние выхода 1 / usr / bin / ld: невозможно найти-lclntsh collect2: ld вернул 1 состояние выхода

Затем я попытался выполнить кросс-компиляцию, как описано в Как вы статически связываете библиотеку ac в go с использованием cgo?

То есть

CGO_ENABLED=0 go build -a -installsuffix cgo -ldflags '-s' user_revoke.go

Но происходит сбой со следующей ошибкой:

# github.com/mattn/go-oci8
/usr/local/go/src/github.com/mattn/go-oci8/oci8_go18.go:13:10: undefined: OCI8Conn

Короче говоря, я пробовал несколько аргументов.Но все они либо дают динамически связанный двоичный файл, либо не компилируются вообще.

Я даже не пытаюсь распределить его между несколькими операционными системами.Я пытаюсь собрать этот пакет для операционной системы, скажем, Mac, чтобы он работал на любых компьютерах Mac без явной установки библиотеки.

...