Как собрать полноценный двоичный файл программы с gccgo?
Я заметил, что при использовании go build
двоичный результат может превышать 2 МБ; но используя gccgo
бинарный файл меньше 35к.
Другая проблема, которую я заметил при использовании gccgo
является то, что созданный двоичный файл не может быть запущен на другом Linux-боксе (отсутствует libgo.so
Я верю) но go build
двоичный файл работает очень хорошо (поэтому я представляю его, потому что двоичный файл включает в себя все, что необходимо для запуска?); есть ли способ сделать это с gccgo
?
3 ответа
Вы должны использовать флаг -static:
Используйте параметр -static для создания полностью статической ссылки (по умолчанию для компилятора gc).
Вы можете связать libgo статически, в то же время динамически связывая системные библиотеки, используя опцию -static-libgo. (Это относится только к gccgo).
С Go 1.8 или выше, если Go построен с CGO_ENABLED=1
(по умолчанию 1), нативная компиляция связывается динамически. Проверьте эту переменную, запустив go env CGO_ENABLED
, Вы можете перейти на статическую ссылку, установив переменную среды CGO_ENABLED в 0 при запуске go build.
CGO_ENABLED=0 go build
Кстати, кросс-компиляция использует статическую связь автоматически.