gccgo 动态链接和模块

Dan*_*iel 5 linker go gccgo

使用 gccgo 编译可执行文件会创建一个动态链接的可执行文件,链接到 libgo.so。我在 ubuntu 20.04 上使用 gccgo-11,从 apt 中提取。

正如预期的那样,生成的可执行文件很小。一个基本的 hello world 大约需要 50Kb。

一旦我开始使用外部模块(在本例中为 viper 和 gorilla/websocket),可执行文件大小就会开始回升至原始的静态链接大小(~9MB)。如果我单独使用 go 编译(不使用 gccgo),可执行文件也约为 9MB。

在我看来,就像模块是单独静态编译的,然后静态链接到最终的可执行文件中。

我在这里忽略了什么吗?是否有一些必须启用的选项?

我希望模块依赖项也由 gccgo 编译,并动态链接到共享 libgo.so。