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