2009-11-18 77 views

回答

13

这是可能的,现在使用-linkshared标志

你需要做的就是先运行此命令:(!上面的代码,使所有通用的软件包共享)

go install -buildmode=shared -linkshared std 

然后

go install -buildmode=shared -linkshared userownpackage 

最后在编译你的代码时你需要运行:

go build -linkshared yourprogram 

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

+1

正确的答案。 – 0x90 2016-02-20 05:32:11

+0

这就是我一直在寻找的东西。但是在我的mac上给出了'-buildmode = shared不支持darwin/amd64'。 – lvle 2017-05-06 16:40:36

3

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

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

+1

截至现在(2013年7月),它是Go Tools的扩展,并未嵌入到Google发布的Go Tools中。 – Nate 2013-07-13 04:02:35

+0

@Nate你能链接到扩展名吗? (独立的)扩展只能在android上使用,还是可以在桌面上使用? – 2015-07-08 19:57:16

+0

@mihaistancu我想它不会太难交叉编译去Android,看看[这里](https://jasonplayne.com/programming-2/how-to-cross-compile-golang-for-android )。考虑到golang 1.5支持iOS,可以很快获得官方支持。 – Nate 2015-07-09 21:37:30

5

Go Execution Modes介绍大厦转到包作为共享库

“在这种模式下围棋包,或一组包,也可以作为共享库导入一个或Go程序。更多的Go包可能会与这个共享库链接,共享库可能会在Go程序链接到运行时间之间更改;程序启动时可用的共享库将是使用...

在Go 1.5发行版中,这仅针对linux-amd64目标实现。使用gccgo它可以针对任何支持的目标实现。“

+0

我回到这个问题来写更新了。 +1 – 2015-08-27 10:19:56