【发布时间】:2017-06-19 19:52:37
【问题描述】:
Go 编程语言的一个重要特性是它可以生成静态链接的二进制文件。但是,当我在 $GOPATH/bin 中运行 'ldd *' 时,我发现了几个动态可执行文件。是否有一套明确的规则可以理解 go 编译器在什么情况下生成动态链接的二进制文件?
【问题讨论】:
-
动态可执行文件是什么意思?尽管生成的二进制文件是静态链接的,但它可能仍依赖于 核心系统库,例如
libcPOSIX 系统,kernel32.dllWindows 等 -
我的意思是动态链接的可执行文件。我应该清楚地提到它。
-
另外,在大多数 golang 构建的二进制文件上运行 ldd 会给出“不是动态可执行文件”的输出,所以我认为甚至不依赖于 libc。但有些项目有动态链接的二进制文件。
-
这取决于可执行文件正在使用的包。例如,当使用
net/http和Get example 一样时,生成的二进制文件依赖于pthread、libc等...
标签: go linker static-linking dynamic-linking