40

是否可以使用 Go 创建共享库 (.so)?

更新:为它创建了一个“问题”。

4

4 回答 4

39

现在可以使用-linkshared标志

你需要做的是首先运行这个命令:

go install -buildmode=shared -linkshared  std

(上面的代码使所有常见的包都可以共享!)然后

go install  -buildmode=shared -linkshared userownpackage

最后在编译代码时,您需要运行:

go build -linkshared yourprogram

上面这些现在是它而不是静态链接所有内容,只是动态链接它们,你最终会得到更小的编译文件。只是为了给你一个想法,我的“hello.go”文件使用静态链接是 2.3MB,而使用动态链接的相同代码只有 12KB!

于 2016-01-28T11:31:52.743 回答
9

Go Execution Modes构建 Go 包描述为共享库

“在这种模式下,可以将一个 Go 包或一组包构建为共享库。导入一个或多个这些 Go 包的 Go 程序可能会链接到这个共享库。共享库可能会在这段时间内更改Go 程序已链接以及运行时间;程序启动时可用的共享库就是将要使用的共享库...

在 Go 1.5 版本中,这仅针对 linux-amd64 目标实现。使用 gccgo 时,它适用于任何受支持的目标。”

于 2015-08-24T21:56:09.617 回答
9

现在可能!我使用 Go 构建了一个 .so 文件,然后很容易导入到 python 中!这是我喜欢的一篇文章:http ://www.darkcoding.net/software/building-shared-libraries-in-go-part-1/

于 2016-07-24T04:47:55.293 回答
5

显然,现在是可能的,但只有在非常精确的情况下。更准确地说,如果您正在为 Android 平台编写代码。

GitHub 上的“goandroid”项目提供了一组补丁,允许 Go 构建一个共享库,以用于 Android NDK 的特定用途。见https://github.com/eliasnaur/goandroid

于 2013-06-29T19:48:10.223 回答