git2go с libssl и libssh2 в одном бинарном файле
Может ли кто-нибудь предложить некоторые предложения (или ресурсы) о том, как я могу упаковать программу GO, использующую git2go, libssl и libssh2, так, чтобы конечный пользователь не устанавливал эти библиотеки отдельно?
Я ориентируюсь только на дистрибутивы Linux (если это имеет значение)
1 ответ
Одним из способов будет статическое построение этих зависимостей и использование PKG_CONFIG_PATH
укажите ваши собственные копии, чтобы все было связано статически. Это должно заставить CMake выбирать статические версии.
Но если цель состоит в том, чтобы избежать зависимости от установленных пользователем библиотек, а не делать все одним исполняемым файлом, я бы рекомендовал отправлять библиотеки и работать с путем загрузки, чтобы убедиться, что они загружаются. С gcc
ты бы прошел -Wl,-R
задать путь поиска в самом двоичном файле, чтобы вы могли указать, где искать общие библиотеки, которые вы отправляете вместе с вашим приложением. С go
похоже, что вы можете пройти -r
компоновщику (через -ldflags
или вручную) сделать то же самое.
libgit2 довольно расширяемый, поэтому существует третий вариант, который заключается в реализации потока TLS и транспорта SSH в Go и подключении их к версии libgit2 без их поддержки. Это, однако, значительный объем работы.