Как статически связать внешние библиотеки Go

У меня есть небольшое приложение, написанное на Golang, которое использует 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 без явной установки библиотеки.

0 ответов

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