我正在尝试为使用net
包的代码创建静态链接的测试二进制文件。但它给了我动态链接测试二进制。
我的代码:
package main
import "net"
func main() {
net.ParseIP("1.1.1.1")
}
测试:
package main
import "testing"
func TestMain(t *testing.T) {
main()
}
我运行命令:
CGO_ENABLED=0 go test -c -installsuffix netgo -a -o ./static && file ./static && ldd ./static
它给出了:
./static: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), not stripped
linux-vdso.so.1 => (0x00007fffa1491000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f3ed433c000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f3ed3f77000)
/lib64/ld-linux-x86-64.so.2 (0x00007f3ed455a000)
如果创建非测试二进制文件,它可以正常工作:
CGO_ENABLED=0 go build -installsuffix netgo -a -o ./static && file ./static && ldd ./static
./static: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, not stripped
not a dynamic executable
如果我删除net
包依赖项或使用go 1.6
,我可以编译静态链接的测试二进制文件。但我需要使用1.4.2和net
包依赖。
另外,我尝试了更多标志:
go test -c -installsuffix netgo,cgo -tags netgo,cgo -ldflags '-s' -a -o ./static && file ./static && ldd ./static
但它无论如何都给了我动态链接的二进制文件。