Мы компилируем наш код Go для запуска на docker, и мы выясняли, почему наш двоичный файл не выполняется. Мы обнаружили, что в нем не хватает некоторых динамических c библиотек (хотя нам нужны статически связанные двоичные файлы).
Вот как он был скомпилирован.
env GOOS=linux CGO_ENABLED=1 GO111MODULE=on GOPRIVATE=github.com/ourrepo GOPROXY=https://proxy.golang.org go build --installsuffix cgo --ldflags='-extldflags=-static' -o program main.go
Использование та же команда build с CGO_ENABLED=0
в конечном итоге устранила проблему, а выходной двоичный файл был статически связан.
Теперь странно то, что у нас есть другая программа, которая использует та же команда сборки , на этот раз с CGO_ENABLED=1
и ... она статически связана!
Поэтому меня очень смущает, почему в некоторых случаях CGO_ENABLED=1
производит динамическое связывание c, а иногда stati c ссылка. Рад предоставить более подробную информацию.