Есть golang пакет, который собирается с использованием куска C++ кода и линкуется с парой библиотек - моей и одной стандартной. В основном файле zuzuzu.go имеются cgo-параметры и определён интерфейс этого пакета. Пакет предоставляет методы, допустим Put() и Get(). Пишу кусок кода по памяти, мог накосячить с синтаксисом, но это не суть - этот кусок не надо пытаться собрать)
package zuzuzu
// #cgo LDFLAGS: -lmy_special_lib
// #cgo LDFLAGS: -lstdc++
...
func Put(a string) {
...
}
func Get() string {
...
}
На выходе получается файлик
${GOPATH}/pkg/linux_amd64/zuzuzu.a
Я раньше думал, что можно взять один этот zuzuzu.a и там будут встроены все символы, которые понадобятся go чтобы понять что это за пакет, какие методы у него есть. Теперь оказывается, что zuzuzu.go юзеру тоже нужен. Но если юзеру отдать zuzuzu.go, то его go начнёт исполнять cgo-директивы и потребует мою библиотеку и доступ к C++ библиотекам. А хотелось отдать юзеру что-то, что не требовало бы от юзера него установленных в системе C++ библиотек и сборки моей библиотеки. Естественно, юзер на той же платформе, допустим.
Как я думал раньше я написал. Теперь я так не думаю, но желание-то осталось: хочется отдать юзеру пакет, собранные из C++ кода и моих либ, но позволяющий себя юзать без знаний о моём C++ коде и без знаний о том, где взять эти либы.
Как это сделать?
P.S. Под «поставлять» я не имею ввиду оформление доступа к разным частям проекта или юридически-лицензионные аспекты дистрибуции ПО. Типа тут один гитхабчик, тут другой гитхабчик, тут лицензия такая, тут такая. Интересна физическая сторона дела: юзер копирует себе на диск только файл .go и только файл .a, при этом его go не пытается ломиться к моим либам.