Предварительная компиляция части программы Go, которая использует C для скорости

Часть моей программы Go опирается на очень большую кодовую базу C с использованием import "C", компиляция которой занимает несколько минут. Есть ли способ предварительно скомпилировать эту библиотеку C как таковую или создать ветку моей программы Go, которая будет предварительно скомпилирована вместе с кодом C, чтобы каждый раз, когда я компилирую основную программу, мне не приходилось ждать всю библиотеку C каждый раз перекомпилировать?


go c cgo
person abagshaw    schedule 02.01.2017    source источник


Ответы (1)


Вместо того, чтобы импортировать весь исходный код C, вы можете связать его с скомпилированными объектными файлами и файлами заголовков. См. https://golang.org/cmd/cgo/, где описано, как использовать LDFLAGS аргумент в пользу cgo.

В Интернете есть другие документы, в которых рассказывается, как компилировать код C в объектные файлы (файлы .a и .o), такие как этот. Вам также следует обратиться к документации по используемой вами библиотеке или ее Makefile, поскольку в ней, скорее всего, уже есть инструкции по ее компиляции в объектные файлы, которые можно связать.

Если библиотека, которая имеет import "C", и ее исходный код не изменяется, вы также можете go get ее (или, возможно, go install ее), которая будет хранить ее скомпилированные объектные файлы в вашей $GOPATH/pkg, что ускорит компиляцию других программ Go, которые импортируют ее.

person 1lann    schedule 02.01.2017