带有 libssl 和 libssh2 的 git2go 在单个二进制文件中
git2go with libssl and libssh2 in single binary
任何人都可以就如何打包使用 git2go、libssl 和 libssh2 的 GO 程序提供一些建议(或资源),这样它不需要最终用户单独安装这些库吗?
我只针对 Linux 发行版(如果重要的话)
一种方法是静态构建这些依赖项,并使用 PKG_CONFIG_PATH
指向您自己的副本,以便所有内容都静态链接。那应该让 CMake 选择静态版本。
但如果目标是避免依赖于用户安装的库而不是将所有内容都作为一个可执行文件,我会建议运送库并使用加载路径以确保它们被加载。使用 gcc
您将传递 -Wl,-R
以在二进制文件本身中设置搜索路径,因此您可以设置在何处搜索您的应用程序附带的共享库。使用 go
看起来你可以将 -r
传递给链接器(通过 -ldflags
或手动)来做同样的事情。
libgit2 相当可扩展,因此还有第三种选择,即在 Go 中实现 TLS 流和 SSH 传输,并将它们插入到不支持这些的 libgit2 版本中。然而,这是一项大量的工作。
任何人都可以就如何打包使用 git2go、libssl 和 libssh2 的 GO 程序提供一些建议(或资源),这样它不需要最终用户单独安装这些库吗?
我只针对 Linux 发行版(如果重要的话)
一种方法是静态构建这些依赖项,并使用 PKG_CONFIG_PATH
指向您自己的副本,以便所有内容都静态链接。那应该让 CMake 选择静态版本。
但如果目标是避免依赖于用户安装的库而不是将所有内容都作为一个可执行文件,我会建议运送库并使用加载路径以确保它们被加载。使用 gcc
您将传递 -Wl,-R
以在二进制文件本身中设置搜索路径,因此您可以设置在何处搜索您的应用程序附带的共享库。使用 go
看起来你可以将 -r
传递给链接器(通过 -ldflags
或手动)来做同样的事情。
libgit2 相当可扩展,因此还有第三种选择,即在 Go 中实现 TLS 流和 SSH 传输,并将它们插入到不支持这些的 libgit2 版本中。然而,这是一项大量的工作。