在go 1.4.2中使用net package为代码编译静态链接的测试二进制文件

时间:2016-06-08 09:32:29

标签: go

我正在尝试为使用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

但它无论如何都给了我动态链接的二进制文件。

0 个答案:

没有答案