2017-01-02 2 views
1

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

ответ

2

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

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

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