Часть моей программы Go работает на очень большой C-кодовой базе с использованием import "C"
, которая занимает несколько минут для компиляции. Есть ли способ предварительно скомпилировать эту библиотеку C или создать ветвь моей программы Go, которая будет предварительно скомпилирована вместе с кодом C, чтобы каждый раз, когда я компилирую основную программу, мне не нужно ждать всей библиотеки C перекомпилировать каждый раз?Предварительная компиляция программы Go, которая полагается на C для скорости
ответ
Вместо импорта всего исходного кода C вы можете связать его с скомпилированными объектными файлами и файлами заголовков. См. https://golang.org/cmd/cgo/, в котором рассказывается, как использовать аргумент LDFLAGS
для cgo.
Есть другие документы в Интернете, которые охватывают как скомпилировать код C в объектные файлы (.a
и .o
файлов), таких как this one. Вы также должны ссылаться на документацию в библиотеке, которую вы используете, или на свой файл Makefile, поскольку у нее, скорее всего, уже есть инструкции по ее компиляции в объектные файлы, которые можно связать.
Если библиотека, которая имеет import "C"
, а его источник не изменяется, вы можете также go get
это, (или, возможно, go install
его), который будет хранить свои скомпилированные объектные файлы в вашем $GOPATH/pkg
, делая компиляцию других программ Go, что импортируйте его быстрее.