git2go с libssl и libssh2 в одном бинарном файле

Может ли кто-нибудь предложить некоторые предложения (или ресурсы) о том, как я могу упаковать программу GO, использующую git2go, libssl и libssh2, так, чтобы конечный пользователь не устанавливал эти библиотеки отдельно?

Я ориентируюсь только на дистрибутивы Linux (если это имеет значение)

1 ответ

Решение

Одним из способов будет статическое построение этих зависимостей и использование PKG_CONFIG_PATH укажите ваши собственные копии, чтобы все было связано статически. Это должно заставить CMake выбирать статические версии.

Но если цель состоит в том, чтобы избежать зависимости от установленных пользователем библиотек, а не делать все одним исполняемым файлом, я бы рекомендовал отправлять библиотеки и работать с путем загрузки, чтобы убедиться, что они загружаются. С gcc ты бы прошел -Wl,-R задать путь поиска в самом двоичном файле, чтобы вы могли указать, где искать общие библиотеки, которые вы отправляете вместе с вашим приложением. С go похоже, что вы можете пройти -r компоновщику (через -ldflags или вручную) сделать то же самое.

libgit2 довольно расширяемый, поэтому существует третий вариант, который заключается в реализации потока TLS и транспорта SSH в Go и подключении их к версии libgit2 без их поддержки. Это, однако, значительный объем работы.

Другие вопросы по тегам